跟着 DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ 学习pytorch,本人属于学了不用就忘的,跟着做一下课程笔记。
由于不想做英文教程的翻译,这里只放一些学习过程中的重点代码和自己的理解,具体完整版本可以看原文。
1.pytorch介绍
深度学习框架之一,学习掌握其使用很有必要。
2.运行环境
在colab的GPU环境中运行。
#torch引入
import torch
3.1 tensor简介
在pytorch中,通常都使用tensor(张量)来编码模型的输入输出。tensor是和数组及矩阵非常相似的一种数据结构,而与Numpy的ndarrays也非常类似。
(1) 利用固定常数或随机初始化
shape = (2,3,)#指定大小
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)
print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")
output:
Random Tensor:
tensor([[0.0203, 0.2768, 0.8346],
[0.6779, 0.1749, 0.3858]])
Ones Tensor:
tensor([[1., 1., 1.],
[1., 1., 1.]])
Zeros Tensor:
tensor([[0., 0., 0.],
[0., 0., 0.]])
(2)查看tensor的各个属性
tensor.shape 查看大小
tensor.dtype 查看数据类型
tensor.device 查看存储位置
(3)tensor的各类操作
- tensor.to 修改tensor存放位置至GPU
if torch.cuda.is_available(): tensor = tensor.to('cuda')
- tensor.cat tensor拼接 (dim=1按行 dim=0按列)
t1 = torch.cat([torch.zeros(3,3), torch.ones(3,3)], dim=1) t2 = torch.cat([torch.zeros(3,3), torch.ones(3,3), ], dim=0)
- tensor * tensor 或 tensor.mul(tensor) 点乘
- tensor @ tensor.T 或 tensor.matmul(tensor.T) 矩阵乘法
- 下划线_ 操作后面跟下划线表示左边的变量会被修改
output:tensor = torch.ones(3,3) tensor.add_(5) print(tensor)
tensor([[6., 6., 6.], [6., 6., 6.], [6., 6., 6.]]) ```
3.2 Torch.autograd介绍
在训练神经网络的过程中包括前向传播和反向传播两个步骤。
在前向传播的过程中:神经网络将输入数据通过一系列含参函数的运算,计算出一个对真实值的估计值。
在反向传播的过程中:神经网络将调整上述函数中的参数,使得真实值与估计值之间的误差减小。调整的步骤是从后向前进行遍历,得到误差关于参数的导数,再利用随机梯度下降来优化参数。
(1)从torchvision中加载一个预训练的resnet18模型(一种网络结构),初始化输入data和标签labels。
resnet18是一种计算机视觉中的网络结构,输入要求是3通道的图像(64643),但模型的输入要求是小批量(mini-batch)的一系列样本而不是单个样本,所以输入要是一个4D的tensor,结构为(nSamples x nChannels x Height x Width)
import torch, torchvision
model = torchvision.models.resnet18(pretrained=True)
data = torch.rand(1, 3, 64, 64)
labels = torch.rand(1, 1000)
(2)进行前向传播。(预训练的模型里已经初始化了各参数)
(3)计算Loss损失,并在error tensor上启动反向传播
loss = (prediction - labels).sum()
loss.backward()
(4)在随机梯度下降的优化器(学习率为0.1,momentum为0.9)中加载所有模型参数,并开始优化
optim = torch.optim.SGD(model.parameters(), lr=0.01, momentum = 0.9)
optim.step()
现在,你已经拥有了训练神经网络所需的一切。
剩余部分会在下节中继续补充。