码迷,mamicode.com
首页 > 其他好文 > 详细

pytorch: grad can be implicitly created only for scalar outputs

时间:2020-06-28 09:56:40      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:ack   要求   ror   相同   created   class   dba   生成   span   

运行这段代码
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

标签:ack   要求   ror   相同   created   class   dba   生成   span   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!