为什么每次向后传播该功能,割炬梯度都会线性增加?

问题描述 投票:1回答:1

我正在尝试使用以下代码来了解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。但是,如果我再次运行最后3行而没有重新分配x,即do

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

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

python machine-learning pytorch torch
1个回答
1
投票

累积渐变直到清除。从the docs(强调我的):

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

可以通过x.grad.zero_()进行此调零,对于torch.optim.Optimizer,可以通过optim.zero_grad()

© www.soinside.com 2019 - 2024. All rights reserved.