1.优化器
1.1 在反向传播计算完所有参数的梯度后,还需要使用优化方法更新网络的权重和参数。例如,随机梯度下降法(SGD)的更新策略如下:
weight= weight-learning_rate*gradient
手动实现如下:
learning_rate=0.01
for f in net.parameters():
f.data.sub_(f.grad_data*learning_rate)#inplace减法
1.2. torch.optim 中实现了深度学习中的绝大多数优化方法,例如:RMSProp、Adam、SGD等,更便于使用,因此通常并不需要手动写上述代码。
import torch.optim as optim
optimizer = optim.SGD(net.parameters(), lr=0.01)
#在训练过程中先梯度清零(与net.zero_grad()效果一样)
optimizer.zero_grad()
#计算损失
output=net(input)
criterion = nn.MSELoss()
loss = criterion(output,target)
#反向传播
loss.backward()
#更新参数
optimizer.step()
2.数据加载与预处理
torchvision实现了常用的图像数据加载功能,例如Imagenet、CIFAR10、MNIST等,以及常用的数据转换操作,极大地方便了数据加载。