torch代码解析--optimizer.zero_grad

 torch代码解析--optimizer.zero_grad

#将梯度初始化为零
optimizer.zero_grad()
# 前向传播求出预测的值
outputs = net(inputs)
# 求出loss
loss = criterion(outputs, labels)
# 反向传播求出梯度
loss.backward()
 # 更新所有参数
optimizer.step()

问题:为什么每个batch都要设置一次optimizer.zero_grad?

回答:根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。

问题:

猜你喜欢

转载自blog.csdn.net/lqz790192593/article/details/89071541