import torch import numpy as np import matplotlib.pyplot as plt x = torch.ones(2,2,requires_grad=True) print('x:\n',x) y = torch.eye(2,2,requires_grad=True) print("y:\n",y) z = x**2+y**3 z.backward() print(x.grad,'\n',y.grad)
结果出现这个错误:RuntimeError: grad can be implicitly created only for scalar outputs
具体原因是什么呢,让我们看看z输出是什么:
z: tensor([[2., 1.],
[1., 2.]], grad_fn=<AddBackward0>)
我们发现z是个张量,但是根据要求output即z必须是个标量,当然张量也是可以的,就是需要改动一处代码:
我们的返回值不是一个标量,所以需要输入一个大小相同的张量作为参数,这里我们用ones_like函数根据x生成一个张量。
个人认为,因为要对x和y分别求导数,所以函数z必须是求得的一个值,即标量。然后开始对x,y分别求偏导数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch: grad can be implicitly created only for scalar outputs - Python技术站