pytorch中的优化器位于torch.optim包内,作用是根据反向传播算法更新神经网络中的参数,以达到降低损失值loss的目的。
对于我们构建好的一个神经网络mynet,这里我们使用SGD算法(Stochastic Gradient Descent,随机梯度下降算法)进行梯度更新。代码如下。
import torch.optim as optim
opt = optim.SGD(mynet.parameters(), lr=0.03)
print(opt)
第一个参数是需要被更新的可学习参数,第二个参数lr为学习率。
接下来就是对模型训练,假设我们训练3个epoch(num_epochs = 3),则训练代码如下。
num_epochs = 3
for epoch in range(1, num_epochs + 1):
for X, y in data_iter:
output = mynet(X) # 获得前向传播结果
l = loss(..., ...) # 计算损失值
# 计算梯度并使用SGD算法进行梯度下降
opt.zero_grad()
l.backward()
opt.step()
核心分为三步
- opt.zero_grad()函数:梯度归零。Pytorch不会自动进行梯度归零,如果不手动清零,则下一次迭代时计算得到的梯度值会与之前留下的梯度值进行叠加。
- l.backward()函数:计算梯度
- opt.step()函数:执行梯度下降,对学习的参数进行一次更新。
版权声明:本文为baidu_38797690原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。