[英]how is the optmization done when we use zero_grad() in PyTorch?
[英]Shall I use grad.zero_() in PyTorch with or without gradient tracking?
我对 PyTorch 很陌生,我有一个关于在一个时期后将梯度归零的问题。 假设我有以下训练循环:
for epoch in range(n_iters):
y_hat = forward(X)
l = loss(y, y_hat)
with torch.no_grad():
l.backward()
w -= lr * w.grad
很明显,为了不累积梯度,我需要将w
的.grad
属性归零。 但是,我不确定在哪里调用w.grad.zero_()
。 我都在互联网教程中找到了在no_grad()
部分中调用它的地方以及从中调用它的地方。 所以我对它们进行了测试,它们都适用于简单的线性回归。
两者有什么区别吗? 如果有,哪个更好用?
在你的片段中,这并不重要。 zero_()
名称中的下划线表示它是一个就地 function,并且由于w.grad.requires_grad == False
我们知道无论如何不会发生任何关于w.grad
的梯度计算。 唯一重要的是它发生在loss.backward()
调用之前。
我建议您为损失 function 和它计算的实际损失张量使用不同的名称,否则您将用另一个名称覆盖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.