如下代码会报错:RuntimeError: grad can be implicitly created only for scalar outputs
import torch x=torch.ones(2,2,requires_grad=True) print(x) y=x+2 print(y) #如果一个张量不是用户自己创建的,则有grad_fn属性.grad_fn 属性保存着创建了张量的 Function 的引用 print(y.grad_fn) y.backward() print(x.grad)
出错原因在于第8行
可以看到y是一个张量,张量不能使用backward(),需要转化为标量,
当然张量也是可以的,就是需要改动一处代码:
y.backward(torch.rand(2,2))
我们的返回值不是一个标量,所以需要输入一个大小相同的张量作为参数,这里我们用ones_like函数根据x生成一个张量。 个人认为,因为要对x求导数,所以函数y必须是求得的一个值,即标量。然后开始对x,y分别求偏导数。
import torch x=torch.ones(2,2,requires_grad=True) print(x) y=x+2 print(y) #如果一个张量不是用户自己创建的,则有grad_fn属性.grad_fn 属性保存着创建了张量的 Function 的引用 print(y.grad_fn) y.backward(torch.rand(2,2)) print(x.grad)