首页 > 其他 > 详细

pytorch: grad can be implicitly created only for scalar outputs

时间:2020-06-28 10:48:06      阅读:146      评论:0      收藏:0      [点我收藏+]
运行这段代码
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必须是个标量,当然张量也是可以的,就是需要改动一处代码:

z.backward(torch.ones_like(x))
我们的返回值不是一个标量,所以需要输入一个大小相同的张量作为参数,这里我们用ones_like函数根据x生成一个张量。
个人认为,因为要对x和y分别求导数,所以函数z必须是求得的一个值,即标量。然后开始对x,y分别求偏导数。

pytorch: grad can be implicitly created only for scalar outputs

原文:https://www.cnblogs.com/peixu/p/13201093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!