grad can be implicitly created only for scalar outputs

Posted 我想月薪过万

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grad can be implicitly created only for scalar outputs相关的知识,希望对你有一定的参考价值。

错误原因

你对 张量 进行了梯度求值

解决方法

在求梯度的时候传一个同维度的张量即可。

错误示例代码如下

import torch

# 第一步:创建 tensor
x = torch.ones(2,2,requires_grad=True)
print(x)

# 第二步:对 tensor 做处理
# x的平方
y = x**2
print(y)

# 第三步:求梯度
y.backward()  # 错误出现在这里,因为 y 是一个张量
print(x.grad)

正确示例代码

import torch

# 第一步:创建 tensor
x = torch.ones(2,2,requires_grad=True)
print(x)

# 第二步:对 tensor 做处理
y = x**2
print(y)

# 第三步:求梯度
y.backward(torch.ones(2,2)) # 传入一个相同维度的张量即可
print(x.grad)

以上是关于grad can be implicitly created only for scalar outputs的主要内容,如果未能解决你的问题,请参考以下文章

(已解决)多卡训练时报错RuntimeError: grad can be implicitly created only for scalar outputs

pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)

Expected isFloatingType(grads[i].type().scalarType()) to be true, but got false.

jpa CriteriaQueryNo explicit selection and an implicit one could not be determined

解决EnforceNotMet: grad_op_maker_ should not be null Operator GradOpMaker has not been registered. at(

解决EnforceNotMet: grad_op_maker_ should not be null Operator GradOpMaker has not been registered. at(