Pytorch之autograd错误grad can be implicitly created only for

如下代码会报错: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)
全部评论

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
手机爱睡觉:感觉是没hc了,上次双选hr说七月份就开了招了很多人
投递网易等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务