PyTorch:优化器Optimizer的使用

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()

核心分为三步

  1. opt.zero_grad()函数:梯度归零。Pytorch不会自动进行梯度归零,如果不手动清零,则下一次迭代时计算得到的梯度值会与之前留下的梯度值进行叠加。
  2. l.backward()函数:计算梯度
  3. opt.step()函数:执行梯度下降,对学习的参数进行一次更新。

你可能感兴趣的:(深度学习,pytorch,深度学习,神经网络)