【Pytorch】反向传播为NaN报错的排查解决方法,RuntimeError: Function ‘BmmBackward0‘ returned nan values
最近在训练模型的过程中,反复出现方向传播至为NaN的报错,报错信息如下所示:
File "/home/fu/anaconda3/envs/torch/lib/python3.7/site-packages/torch/autograd/__init__.py", line 156, in backward allow_unreachable=True, accumulate_grad=True) # allow_unreachable flag
RuntimeError: Function 'BmmBackward0' returned nan values in its 1th output.
一般情况下,反向传播中有个别Nan值,并不会引起训练发生报错,只有在打开自动微分异常监测时:torch.autograd.
detect_anomaly(True)
,才会出现任意Nan都会引起模型报错。
在模型正常训练阶段不建议打开autograd.
detect_anomaly,
会使训练速度大大减慢,以笔者 这里的测试,打开后,原本4个小时的训练被减慢至7.5个小时;打开后可以辅助找到出现Nan值的位置。pytorch官方文档中的表述是这样的:
我在autograd.
detect_anomaly
打开的情况下经过多次记录,发现反向传播出现NaN的位置主要有三处:
1. 开平方根sqrt()函数,其导数为1/2*x^(-0.5),当输入值为0时,会使反向传播值为Nan
2. n次幂pow()函数,尤其是n小于1时,也会出现输入值在分母上的情况
File "/home/fu/0805_fully_debug/code/model/modules.py", line 281, in forwardv1 = torch.sqrt(torch.pow(vx1, 2) + torch.pow(vy1, 2)).clone()(Triggered internally at ../torch/csrc/autograd/python_anomaly_mode.cpp:104.)
反向传播时出现NaN
这里可以通过不使用这两个函数来避免该问题,如果还是无法解决,可以在分母上加上微值eps,避免分母为0
3.损失函数中出现Nan
File "/home/fu/0805_fully_debug/code/model/losses.py", line 14, in nll_with_covarianceserrors = coordinates_delta.permute(0, 1, 2, 4, 3) @ precision_matrices @ coordinates_delta(function _print_stack)
这时并不能直接看出问题,这时可以将所有梯度打印出来,参照记录一次 NaN in Loss 的解决过程中的过程,一步步找到问题的根源。
【Pytorch】反向传播为NaN报错的排查解决方法,RuntimeError: Function ‘BmmBackward0‘ returned nan values相关推荐
- Python发送邮件smtplib.SMTP各报错问题的解决方法
Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...
- Eslint报错整理与解决方法(持续整理)
Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...
- 登录mysql报错2059_navicat连接mysql报错2059的解决方法
navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...
- php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法
本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...
- mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法
突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...
- cobbler安装4个报错汇总及解决方法:ImportError
cobbler安装4个报错汇总及解决方法:ImportError 参考文章: (1)cobbler安装4个报错汇总及解决方法:ImportError (2)https://www.cnblogs.co ...
- 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法
安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...
- eslint 验证vue文件 报错 unexpected token =解决方法
eslint 验证vue文件 报错 unexpected token =解决方法 参考文章: (1)eslint 验证vue文件 报错 unexpected token =解决方法 (2)https: ...
- win11安装报错0xc1900101怎么办 Windows11安装报错0xc1900101的解决方法
自己的电脑升级到win11操作系统的时候都会遇到win11系统安装出错了,出现错误代码0xc1900101的问题,导致我们无法安装新系统,下面来看看win11安装报错0xc1900101的解决方法吧. ...
最新文章
- ISAIR2022征稿【中国・上海​, 2022年10月21-23日】
- P6295 有标号 DAG 计数(多项式指数函数对数函数/二项式反演/动态规划/生成函数)
- 66Linux主机名和hosts67网络配置小结
- java中的byte
- 微软:确实存在另一枚 print spooler 0day,目前尚未修复
- 【MongoDB系列】:MongoDB 查询应用
- ofstream的使用方法
- 9,求整数的二进制中1的个数《剑指offer》
- Android Studio下JUnit单元测试
- CSS实现折角样式效果
- Windows操作系统注册表registry
- 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集
- 简单的卷积神经网络编程,python卷积神经网络训练
- 四、字符串(7):重复的子字符串
- 【Python】基础语法之一:变量、字符串、数、注释
- C#Unity3d怪物在一定范围内巡逻发现玩家自动跟踪攻击,血量低于30%自动向后跳3米并缓慢回血的代码和使用
- 编程的宗派(OOP与FP孰优孰劣)--王垠
- 计算机专业算理算工,计算机在高考时是算文还是算理啊
- ubuntu安装sulley
- 为什么建议使用你LocalDateTime,而不是Date?
热门文章
- 牙医是怎么护理牙齿的?
- Android UI 设计规范,数据结构与算法面试题
- 加油卡 格式判断 java_[代码全屏查看]-基于JAVA的加油卡充值接口调用代码实例...
- 王炸!!IDEA 2021.1 推出语音、视频功能,边写代码边聊天,我真的服了…
- 解决在安装Autokroma Influx插件的 Premiere Pro for Mac m1电脑上,导入Flac/MKV/FLV文件后,拖入音轨无声音、导入失败等一系列问题?
- windows sublime格式化json快捷键
- 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
- 基于Sqli-Labs靶场的SQL注入-第五关(重点讲双查询注入)
- vue实现下拉二级联动_vue 实现二级联动
- python安装盒怎么打开_Python学习笔记(六)Python盒子:模块,包和程序