前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytorch loss反向传播出错

pytorch loss反向传播出错

作者头像
全栈程序员站长
发布2022-08-31 14:52:12
1.1K0
发布2022-08-31 14:52:12
举报

大家好,又见面了,我是你们的朋友全栈君。

今天在使用pytorch进行训练,在运行 loss.backward() 误差反向传播时出错 :

RuntimeError: grad can be implicitly created only for scalar outputs

File “train.py”, line 143, in train loss.backward() File “/usr/local/lib/python3.6/dist-packages/torch/tensor.py”, line 198, in backward torch.autograd.backward(self, gradient, retain_graph, create_graph) File “/usr/local/lib/python3.6/dist-packages/torch/autograd/__init__.py”, line 94, in backward grad_tensors = _make_grads(tensors, grad_tensors) File “/usr/local/lib/python3.6/dist-packages/torch/autograd/__init__.py”, line 35, in _make_grads raise RuntimeError(“grad can be implicitly created only for scalar outputs”) RuntimeError: grad can be implicitly created only for scalar outputs

问题分析:

因为我们在执行 loss.backward() 时没带参数,这与 loss.backward(torch.Tensor(1.0)) 是相同的,参数默认就是一个标量。

但是由于自己的loss不是一个标量,而是二维的张量,所以就会报错。

解决办法:

1. 给 loss.backward() 指定传递给后向的参数维度:

代码语言:javascript
复制
loss = criterion(pred, targets)
loss.backward()
# 改为:
loss = criterion(pred, targets)
loss.backward(loss.clone().detach())

2. 修改loss函数的输出维度,把张量的输出修改为标量,比如说多多个维度的loss求和或求均值等。此方法对于某些任务不一定适用,可以尝试自己修改。

代码语言:javascript
复制
criterion = nn.L1Loss(reduction='none')
# 把参数去掉,改为:
criterion = nn.L1Loss()

这里顺便介绍一下pytorch loss函数里面 的reduction 参数:

在新的pytorch版本里,使用reduction 参数取代了旧版本的size_average和reduce参数。

reduction 参数有三种选择:

‘elementwise_mean’:为默认情况,表明对N个样本的loss进行求平均之后返回(相当于reduce=True,size_average=True);

‘sum’:指对n个样本的loss求和(相当于reduce=True,size_average=False);

‘none’:表示直接返回n分样本的loss(相当于reduce=False)


参考:

http://www.cocoachina.com/articles/90127

https://blog.csdn.net/goodxin_ie/article/details/89645358

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144114.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档