为什么每次反向传播割炬梯度都会线性增加?

时间:2020-03-15 18:15:56

标签: python machine-learning pytorch torch

我正在尝试使用以下代码来了解PyTorch反向传播的工作原理。

import torch
import numpy
x = torch.tensor(numpy.e, requires_grad=True)
y = torch.log(x)
y.backward()
print(x.grad)

按预期,结果为tensor(0.3679),即1 / x,它是log(x) w.r.t.的派生词。 xx = numpy.e。但是,如果我再次运行最后三行而没有重新分配x,即

y = torch.log(x)
y.backward()
print(x.grad)

然后我将得到tensor(0.7358),它是先前结果的两倍。 为什么会这样?

1 个答案:

答案 0 :(得分:1)

积累渐变直到清除。来自the docs(重点是我):

此函数会在树叶中累积渐变-在调用它之前,您可能需要将其归零。

可以通过x.grad.zero_()进行调零,如果是torch.optim.Optimizer,可以通过optim.zero_grad()进行调零。