要检查我对PyTorch的{{1}}方法的理解,我正在尝试以下代码段:
backward
通过手工计算,我得到import torch
x = torch.rand(3,requires_grad=True)
y = 2 * x
z = 3 * y
l = torch.sum(z)
l.backward()
和dl/dz = (1.,1.,1.)
,并且我相信dl/dy = (3.,3.,3.)
方法会使用此信息,以便使用雅可比矢量积来计算backward
。
现在,当我执行dl/dx = (6.,6.,6.)
时,我会按预期得到x.grad
。但是,当我尝试tensor([6., 6., 6.])
或y.grad
时,得到的是z.grad
,而不是None
和tensor([3., 3., 3.])
。为什么会这样?