目录
第一章 PyTorch的简介与安装
PyTorch是Facebook人工智能研究小组开发的,广泛应用于工业领域和研究,在Caffe2中有应用。
本次是在Anacaonda中进行了PyTorch的安装:
1.登录PyTorch官网(PyTorch),选择与计算机匹配的版本,结合是否有显卡选择CUDA版本或CPU版本,找到安装命令行。
2.为了避免现有环境中包的版本与PyTorch冲突,先使用Anaconda Prompt创建了新的虚拟环境:
conda create -n data_analysis_env python==3.8.3
(删除虚拟环境命令:conda remove -n data_analysis_env --all)
激活新环境:
conda activate data_analysis_env
(退出虚拟环境命令:conda deactivate)
3.将PyTorch官网中找到的安装命令行复制粘贴至Anaconda,如想使用清华园、豆瓣源下载,可将末尾的 -c pytorch删除,并在anaconda中配置镜像地址。
conda install pytorch torchvision torchaudio cpuonly -c pytorch
第一次安装时想使用清华源,删除了‘-c pytorch’,结果报错“Solving environment: failed with initial frozen solve. Retrying with flexible solve”,后来直接使用官网路径,不删除‘-c pytorch’,反而成功了,速度也不慢。
这一步没有问题就安装完成啦~撒花~
第二章 PyTorch基础知识
本章主要包括三个内容:tensor的python基础操作、自动求导和并行计算。
1 tensor基础操作
1.1 创建tensor
# 创建tensor--指定数据类型
torch.tensor(1,dtype=torch.float)
torch.tensor(1,dtype=torch.long)
torch.tensor(1,dtype=torch.int8)
# 创建tensor--指定大小
torch.FloatTensor(2,3)
torch.IntTensor(2)
torch.rand(2,3) # 取值为0-1间
torch.ones(2,3) # 取值全部为1
torch.zeros(2,3) # 取值全部为0
torch.arange(0,10,2) # 取值为 0,2,4,6,8
1.2 数据结构转换
# list-->tensor
torch.IntTensor([1,2,3])
# numpy.array-->tensor
a = np.array([[1,2,3],[4,5,6]])
torch.tensor(a)
torch.from_numpy(a)
# tensor-->numpy.array
b = torch.tensor(a)
b.numpy()
1.3 tensor索引
# tensor索引
c = torch.rand(2,3)
c[:,0] #查看第0列
c[0,:] #查看第0行
1.4 tensor的维度
c = torch.rand(2,3)
# 查看tensor维度
c.size()
c.shape
# 改变tensor形状
c.view(3,2)
c.view(-1,2) # 列为2,行自动计算是多少
# 改变tensor维度
# unsqueeze:在指定位置增加1维
d = c.unsqueeze(1)
c.shape #(2,3)
d.shape #(2,1,3) 在位置1处增加1维
# squeeze:在指定位置减少1维,只有当该位置维度为1时,squeeze生效
d.squeeze(0) #无效,c的维度为(2,1,3),有且仅有索引为1的位置可以降维
d.squeeze(1) #d.shape由(2,1,3)降维至(2,3)
1.5 tensor运算
# tensor运算
c = torch.rand(2,3)
torch.add(c,1)
1.6 tensor的广播机制
e = torch.arange(1,3).view(1,2)
f = torch.arange(1,4).view(3,1)
e
f
e+f
tensor([[1, 2]])tensor([[1], [2], [3]])tensor([[2, 3], [3, 4], [4, 5]])
2 自动求导
通过反向传播法进行求导,导数遵循复合函数求导的链式法则
#requires_grad=True设置为True,才能支持反向传播
x1 = torch.tensor(1.0,requires_grad=True)
x2 = torch.tensor(2.0,requires_grad=True)
y = x1 + 2*x2
x1.grad.data #此时报错,x1的倒数无法求得
# 此时无法求导,反向传播后才能求
y = x1 + 2*x2
y.backward()
# 导数是会累积的,重复运行相同命令,grad会增加,所以每次计算前需要清除当前导数
x1.grad.data
x2.grad.data
3 并行计算
3.1 why?
能计算——显存占用
算的快——计算速度
效果好——大batch提升训练效果
3.2 how?-CUDA
GPU厂商NVIDIA提供的GPU计算框架,GPU本身的编程基于CUDA语言实现
在PyTorch中,CUDA主要指使用GPU(而非CPU)进行计算
3.3 常见并行方法
网络结构分布到不同设备中
同一层的任务分布到不同设备中
不同数据分布到不同设备中(Data Parallelism,常用)
cuDNN是用于深度神经网络的加速库,基于CUDA完成深度学习的加速
相关学习资源:
*课程github地址:https://github.com/datawhalechina/thorough-pytorch
*课程gitee地址:https://gitee.com/datawhalechina/thorough-pytorch
*B站视频:https://www.bilibili.com/video/BV1L44y1472Z