为什么在这种情况下torch.autograd不计算梯度?

时间:2020-04-14 21:13:25

标签: python pytorch gradient backpropagation autograd

在这种情况下,为什么torch.autograd不计算梯度?<​​/ p>

import torch
x = torch.tensor([1., 2., ], requires_grad=True)
y = torch.tensor([x[0] + x[1], x[1] - x[0], ], requires_grad=True)
z = y[0] + y[1]
z.backward()
x.grad

输出为空行(无)。 x[0].grad也会发生同样的情况。为什么?

PS:回想起来,我意识到用y使requires_grad成为张量的动机是,所以我可以检查它自己的梯度。我了解到必须在此使用retain_gradWhy does autograd not produce gradient for intermediate variables?

1 个答案:

答案 0 :(得分:1)

当将torch.tensor用于y时,它仅使用x的值来初始化张量,则梯度链丢失。

这有效:

x = torch.tensor([1., 2., ], requires_grad=True)
y = [x[0] + x[1], x[1] - x[0], ]
z = y[0] + y[1]
z.backward()
x.grad

结果为tensor([0., 2.])