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(