为什么我们需要在`zero_grad`中调用`detach_`?

时间:2018-02-28 12:09:26

标签: pytorch

我正在阅读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_()不够?

1 个答案:

答案 0 :(得分:1)

您不希望以前的渐变更新影响将来的渐变更新,因此您要从图形中分离以前的渐变。