TypeError: backward() got an unexpected keyword argument 'grad_tensors' in pytorch

TypeError: backward() got an unexpected keyword argument 'grad_tensors' in pytorch

我有以下

w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)

a = torch.add(w, x)
b = torch.add(w, 1)

y0 = torch.mul(a, b)    # y0 = (x+w) * (w+1)
y1 = torch.add(a, b)    # y1 = (x+w) + (w+1)     


loss = torch.cat([y0, y1], dim=0)       # [y0, y1]

weight = torch.tensor([1., 2.])

loss.backward(grad_tensors=weight)

以上给我TypeError: backward() got an unexpected keyword argument 'grad_tensors' 我检查了 websitegrad_tensors 确实存在于 backward.

然而,当我使用

loss.backward(gradient=weight)

有效。 gradient 不是 backward 中的参数。有什么想法吗?我的 pytorch 版本是 1.7.0。谢谢。

您正在调用 torch.Tensor.backward,而不是 torch.autograd.backward

关于你的第二个问题 b/w 两者的区别 torch.Tensor.backward internally calls torch.autograd.backward,它计算给定张量的梯度 w.r.t。图叶。

torch.autograd.backward(self, gradient, retain_graph, create_graph)

对应

torch.autograd.backward(tensors: self, grad_tensors: gradient, retain_graph, create_graph)

因此,下面两个是等价的:

loss.backward(gradient=weight)
torch.autograd.backward(loss, weight)