pytorch: grad can be implicitly created only for scalar outputs
Posted peixu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch: grad can be implicitly created only for scalar outputs相关的知识,希望对你有一定的参考价值。
import torch import numpy as np import matplotlib.pyplot as plt x = torch.ones(2,2,requires_grad=True) print(‘x: ‘,x) y = torch.eye(2,2,requires_grad=True) print("y: ",y) z = x**2+y**3 z.backward() print(x.grad,‘ ‘,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的主要内容,如果未能解决你的问题,请参考以下文章
grad can be implicitly created only for scalar outputs
(已解决)多卡训练时报错RuntimeError: grad can be implicitly created only for scalar outputs
Pytorch 抛出错误 RuntimeError: result type Float can't be cast to the desired output type Long
PyTorch:The “freeze_support()” line can be omitted if the program is not going to be frozen
net.zero_grad() 与 optim.zero_grad() pytorch
python opencv error “parallel_impl.cpp (240) WorkerThread 155: Can‘t spawn new thread: res = 11“