x = torch.ones(2,requires_grad=True)
z = x + 2
z.backward()
上面的报错信息意思是只有对标量输出它才会计算梯度,而求一个矩阵对另一矩阵的导数束手无策,解决方法是给backward加上参数grad_tensors,相当于z和一个大小相同的矩阵相乘后再求导,grad_tensors
的作用其实可以简单地理解成在求梯度时的权重,因为可能不同值的梯度对结果影响程度不同
x = torch.ones(2,requires_grad=True)
z = x + 2
z.backward(torch.ones_like(z)) # grad_tensors需要与输入tensor大小一致
print(x.grad)