繁体   English   中英

我应该在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM