PyTorch学习笔记(二):PyTorch简介与基础知识

PyTorch学习笔记(二):PyTorch简介与基础知识

👨‍💻 作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享, 公众号:GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复”加群”或➡️点击链接
🎉 专栏推荐:➡️ 点击访问《计算机视觉》:长期更新不限于深度学习、OCR、目标检测、图像分类、分割等方向总结资料。 ➡️ 点击访问《深入浅出OCR》: 对标全网最全OCR教程。以上目前活动仅29.9,感兴趣小伙伴可关注下。
🎉 学习者福利:强烈推荐一个优秀AI学习网站,包括机器学习、深度学习等理论与实战教程,非常适合AI学习者。➡️网站链接
🎉 技术控福利:程序员兼职社区招募!技术范围广,CV、NLP方向均可,要求有一定基础,最好是研究生及以上或有工作经验,欢迎大佬加入!群内Python、c++、Matlab等各类编程语言单应有尽有, 资源靠谱、费用自谈,有意向直接➡️访问

往期学习资料推荐:

  1. Pytorch实战笔记_GoAI的博客-CSDN博客

  2. Pytorch入门教程_GoAI的博客-CSDN博客

本系列目录:

PyTorch学习笔记(一):PyTorch环境安装

PyTorch学习笔记(二):简介与基础知识

PyTorch学习笔记(三):PyTorch主要组成模块

PyTorch学习笔记(四):PyTorch基础实战

PyTorch学习笔记(五):模型定义、修改、保存

PyTorch学习笔记(六):PyTorch进阶训练技巧

PyTorch学习笔记(七):PyTorch可视化

PyTorch学习笔记(八):PyTorch生态简介

后续继续更新!!!!

1. PyTorch简介

  • 概念:由Facebook人工智能研究小组开发的一种基于Lua编写的Torch库的Python实现的深度学习库
  • 优势:简洁、上手快、具有良好的文档和社区支持、项目开源、支持代码调试、丰富的扩展库

2 PyTorch基础知识

2.1张量

  • 分类:0维张量(标量)、1维张量(向量)、2维张量(矩阵)、3维张量(时间序列)、4维张量(图像)、5维张量(视频)
  • 概念:一个数据容器,可以包含数据、字符串等
import torch
创建tensor
x = torch.rand(4, 3)
print(x)
构造数据类型为long,数据是0的矩阵
x = torch.zeros(4, 3, dtype=torch.long)
print(x)
tensor([[0.9515, 0.6332, 0.8228],
        [0.3508, 0.0493, 0.7606],
        [0.7326, 0.7003, 0.1925],
        [0.1172, 0.8946, 0.9501]])
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])
  • 常见的构造Tensor的函数:函数功能Tensor( sizes)基础构造函数tensor(data)类似于np.arrayones( sizes)全1zeros( sizes)全0eye( sizes)对角为1,其余为0arange(s,e,step)从s到e,步长为steplinspace(s,e,steps)从s到e,均匀分成step份rand/randn(* sizes)rand是[0,1)均匀分布;randn是服从N(0,1)的正态分布normal(mean,std)正态分布(均值为mean,标准差是std)randperm(m)随机排列
  • 操作:
  • 使用索引表示的变量与原数据共享内存,即修改其中一个,另一个也会被修改
  • 使用 torch.view改变tensor的大小
  • 广播机制:当对两个形状不同的Tensor按元素运算时,可能会触发广播(broadcasting)机制
使用view改变张量的大小
x = torch.randn(5, 4)
y = x.view(20)
z = x.view(-1, 5) # -1是指这一维的维数由其他维度决定
print(x.size(), y.size(), z.size())
torch.Size([5, 4]) torch.Size([20]) torch.Size([4, 5]) 
x = tensor([[1, 2]])
y = tensor([[1],
        [2],
        [3]])
x + y = tensor([[2, 3],
        [3, 4],
        [4, 5]])

2.2 自动求导

  • autograd包:提供张量上的自动求导机制
  • 原理:如果设置 .requires_gradTrue,那么将会追踪张量的所有操作。当完成计算后,可以通过调用 .backward()自动计算所有的梯度。张量的所有梯度将会自动累加到 .grad属性
  • FunctionTensorFunction互相连接生成了一个无环图 (acyclic graph),它编码了完整的计算历史。每个张量都有一个 .grad_fn属性,该属性引用了创建 Tensor自身的 Function
x = torch.ones(2, 2, requires_grad=True)
print(x)
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
y = x ** 2
print(y)
tensor([[1., 1.],
        [1., 1.]], grad_fn=)
z = y * y * 3
out = z.mean()
print("z = ", z)
print("z mean = ", out)
z =  tensor([[3., 3.],
        [3., 3.]], grad_fn=)
z mean =  tensor(3., grad_fn=)

PyTorch学习笔记(二):PyTorch简介与基础知识

grad的反向传播:运行反向传播,梯度都会累加之前的梯度,所以一般在反向传播之前需把梯度清零

out.backward()
print(x.grad)
tensor([[3., 3.],
        [3., 3.]])
反向传播累加
out2 = x.sum()
out2.backward()
print(x.grad)
tensor([[4., 4.],
        [4., 4.]])

2.3并行计算

  • 目的:通过使用多个GPU参与训练,加快训练速度,提高模型学习的效果
  • CUDA:通过使用NVIDIA提供的GPU并行计算框架,采用 cuda()方法,让模型或者数据迁移到GPU中进行计算
  • 并行计算方法:
  • Network partitioning:将一个模型网络的各部分拆分,分配到不同的GPU中,执行不同的计算任务
  • Layer-wise partitioning:将同一层模型拆分,分配到不同的GPU中,训练同一层模型的部分任务
  • Data parallelism(主流):将不同的数据分配到不同的GPU中,执行相同的任务

Original: https://blog.csdn.net/qq_36816848/article/details/123560830
Author: GoAI
Title: PyTorch学习笔记(二):PyTorch简介与基础知识

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/618915/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球