我正在阅读optimizer.zero_grad()
的源代码
http://pytorch.org/docs/master/_modules/torch/optim/optimizer.html#Optimizer.zero_grad
def zero_grad(self):
"""Clears the gradients of all optimized :class:`Variable` s."""
for group in self.param_groups:
for p in group['params']:
if p.grad is not None:
p.grad.detach_()
p.grad.zero_()
我想知道为什么detach_()
是必要的? detach
对梯度变量而不是正常变量甚至意味着什么?
为什么zero_()
不够?
您不希望先前的渐变更新影响将来的渐变更新,因此您将从图形中分离先前的渐变。