pytorch loss反向传播出错
今天在使用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() 指定传递给后向的参数维度:
loss = criterion(pred, targets)
loss.backward()
# 改为:
loss = criterion(pred, targets)
loss.backward(loss.clone().detach())
2. 修改loss函数的输出维度,把张量的输出修改为标量,比如说多多个维度的loss求和或求均值等。此方法对于某些任务不一定适用,可以尝试自己修改。
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
pytorch loss反向传播出错相关推荐
- 人工智能-作业1:PyTorch实现反向传播
人工智能-作业1:PyTorch实现反向传播 人工智能-作业1:PyTorch实现反向传播 环境配置: 计算过程 反向传播 PyTorch Autograd自动求导 人工智能-作业1:PyTorch实 ...
- pytorch学习 -- 反向传播backward
pytorch学习 – 反向传播backward 入门学习pytorch,在查看pytorch代码时对autograd的backard函数的使用和具体原理有些疑惑,在查看相关文章和学习后,简单说下我自 ...
- 【2021-2022 春学期】人工智能-作业1:PyTorch实现反向传播
1 安装pycharm,配置好python开发环境 PyCharm 安装教程(Windows) | 菜鸟教程 (runoob.com) 2 安装pytorch PyTorch 3 使用pytorch实 ...
- Pytorch的反向传播backward()详解
在Pytorch中,我们有时候会进行多个loss的回传,然而回传中,会发生一些错误.例如: RuntimeError: Trying to backward through the graph a s ...
- Pytorch(三) --反向传播
整体上来说,和上一节的梯度下降法差不多,不过这次是用Pytorch实现的,调用了其中的一些方法. 需要注意的事项: ①Tensor中包含data和grad,其中data和grad也是Tensor.在更 ...
- 【Pytorch】反向传播为NaN报错的排查解决方法,RuntimeError: Function ‘BmmBackward0‘ returned nan values
最近在训练模型的过程中,反复出现方向传播至为NaN的报错,报错信息如下所示: File "/home/fu/anaconda3/envs/torch/lib/python3.7/site-p ...
- 使用pytorch构建一个神经网络、损失函数、反向传播、更新网络参数
关于torch.nn: 使用Pytorch来构建神经网络, 主要的工具都在torch.nn包中. nn依赖于autograd来定义模型, 并对其自动求导. 构建神经网络的典型流程: 定义一个拥有可学习 ...
- Pytorch框架中SGD&Adam优化器以及BP反向传播入门思想及实现
因为这章内容比较多,分开来叙述,前面先讲理论后面是讲代码.最重要的是代码部分,结合代码去理解思想. SGD优化器 思想: 根据梯度,控制调整权重的幅度 公式: 权重(新) = 权重(旧) - 学习率 ...
- Pytorch(5)-梯度反向传播
自动求梯度 1. 函数对自变量x求梯度--ax^2+b 2. 网络对参数w求梯度- loss(w,x) 3. 自动求梯度的底层支持--torch.autograd 3.1 Variable 3.1.1 ...
最新文章
- 电脑练习打字软件_KeyBlaze Free Typing Tutor(打字练习软件)最新版下载_KeyBlaze Free Typing Tutor(打字练习软件)最新版本下载v4.02官方版...
- Axis --SOAP引擎
- GitLab五种权限
- 计算机教室安全预案 博客,校园安全应急预案
- 阿里推出会议AI助理“听悟”,面向未来会议
- 简练软考知识点整理-估算成本过程
- Hystrix 熔断器舱壁模式
- 《面向数据科学的概率论》翻译活动期待大家的参与 | ApacheCN
- 数据结构和算法1 稀疏数组
- arduino 停止程序_Arduino用ISD1820语音录放模块制作留言机
- 从此使用linux系统,但是QQ是必不可少的!!该篇文章方法成功!!!已验证!!!!!...
- FlightGear编译
- 开发erp管理系统的好处
- python合并excel工作簿_Python操作Excel教程-合并同一工作簿下多张工作表
- 华南理工计算机就业棒棒,国内3所校名“一字之差”的大学:均为理工大学,实力却天差地别...
- 跨端融合!探索前沿科技无限可能,深圳腾讯2018TLC大会再度来袭,早鸟票最后一天...
- 快捷餐饮之店家后台厨艺秀实现
- 石油大P14040存在
- KBEngine warring项目源码阅读(三) 实体文件与Account处理
- 养车记账本小程序开发教程
热门文章
- 跨平台应用开发进阶(四十七)APP字体库文件处理方案
- 新型冠状病毒之物资的分配
- 什么是wildfly
- 面向对象程序设计(c++)面试常问——for考研复试面试
- C语言数据存储-浮点型
- HTML黑白触摸变彩色,使用HTML5 转换彩色图片为黑白色知识讲解.doc
- java毕业设计免税商品优选购物商城设计mybatis+源码+调试部署+系统+数据库+lw
- R语言数据可视化教程(ggplot2)_绘制散点图
- 蜂鸟E200模块分析——IFU:Simple-BPU
- 有未经处理的异常 0xC00000FD Stack overflow (参数: 0x00000000, 0x00842000)