import torch
a = torch.tensor([2.], requires_grad=True)
y = torch.zeros((10))
gt = torch.zeros((10))
y[0] = a
y[1] = y[0] * 2
y.retain_grad()
loss = torch.sum((y-gt) ** 2)
loss.backward()
print(y.grad)
我希望y[0]的梯度由两部分组成:
- 向后传播损失到y[0]本身。
- y[0]被用于计算y[1],因此它应该具有y[1]梯度的一部分。
但是当我运行这段代码时,y[0]的梯度中只有第一部分。
那么如何使y[0]的梯度包含这两个部分呢?
编辑:输出为:
tensor([4., 8., 0., 0., 0., 0., 0., 0., 0., 0.])
但我期望:
tensor([20., 8., 0., 0., 0., 0., 0., 0., 0., 0.])
a.grad = (y[0] - 0) ^ + (y[1] - 0)^2这个怎么样? - undefined