PyTorch教程:21个项目玩转PyTorch实战
上QQ阅读APP看书,第一时间看更新

1.2.4 反向传播与更新参数

当计算出一次前向传播的loss值之后,可进行反向传播计算梯度,以此来更新参数。在PyTorch中,对loss调用backward函数即可。backward函数属于torch.autograd函数库,在深度学习过程中进行反向传播,计算输出变量关于输入变量的梯度。最后要做的事情就是更新神经网络的参数,最简单的规则就是随机梯度下降,公式如下:

当然,还有很多不同的更新规则,类似于SGD、Nesterov-SGD、Adam、RMSProp等,为了让这些可行,PyTorch建立了一个torch.optim包,调用它可以实现上述任意一种优化器,代码如下:

在训练开始前,先定义好优化器optim.SGD和损失函数nn.CrossEntropyLoss,当开始迭代进行训练时,将数据进行输入,得到的输出用来和实际标签计算loss,对loss进行反向传播,最后通过优化器更新参数。其中需要对优化器进行消除梯度,因为在使用backward函数时,梯度是被累积而不是被替换掉的,但是在训练每个batch(指一批数据)时不需要将两个batch的梯度混合起来累积,所以这里需要对每个batch设置一遍zero_grad。