最近在训练模型的过程中,反复出现方向传播至为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相关推荐

  1. Python发送邮件smtplib.SMTP各报错问题的解决方法

    Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...

  2. Eslint报错整理与解决方法(持续整理)

    Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...

  3. 登录mysql报错2059_navicat连接mysql报错2059的解决方法

    navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...

  4. php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法

    本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...

  5. mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法

    突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...

  6. cobbler安装4个报错汇总及解决方法:ImportError

    cobbler安装4个报错汇总及解决方法:ImportError 参考文章: (1)cobbler安装4个报错汇总及解决方法:ImportError (2)https://www.cnblogs.co ...

  7. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

    安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...

  8. eslint 验证vue文件 报错 unexpected token =解决方法

    eslint 验证vue文件 报错 unexpected token =解决方法 参考文章: (1)eslint 验证vue文件 报错 unexpected token =解决方法 (2)https: ...

  9. win11安装报错0xc1900101怎么办 Windows11安装报错0xc1900101的解决方法

    自己的电脑升级到win11操作系统的时候都会遇到win11系统安装出错了,出现错误代码0xc1900101的问题,导致我们无法安装新系统,下面来看看win11安装报错0xc1900101的解决方法吧. ...

最新文章

  1. ISAIR2022征稿【中国・上海​, 2022年10月21-23日】
  2. P6295 有标号 DAG 计数(多项式指数函数对数函数/二项式反演/动态规划/生成函数)
  3. 66Linux主机名和hosts67网络配置小结
  4. java中的byte
  5. 微软:确实存在另一枚 print spooler 0day,目前尚未修复
  6. 【MongoDB系列】:MongoDB 查询应用
  7. ofstream的使用方法
  8. 9,求整数的二进制中1的个数《剑指offer》
  9. Android Studio下JUnit单元测试
  10. CSS实现折角样式效果
  11. Windows操作系统注册表registry
  12. 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集
  13. 简单的卷积神经网络编程,python卷积神经网络训练
  14. 四、字符串(7):重复的子字符串
  15. 【Python】基础语法之一:变量、字符串、数、注释
  16. C#Unity3d怪物在一定范围内巡逻发现玩家自动跟踪攻击,血量低于30%自动向后跳3米并缓慢回血的代码和使用
  17. 编程的宗派(OOP与FP孰优孰劣)--王垠
  18. 计算机专业算理算工,计算机在高考时是算文还是算理啊
  19. ubuntu安装sulley
  20. 为什么建议使用你LocalDateTime,而不是Date?

热门文章

  1. 牙医是怎么护理牙齿的?
  2. Android UI 设计规范,数据结构与算法面试题
  3. 加油卡 格式判断 java_[代码全屏查看]-基于JAVA的加油卡充值接口调用代码实例...
  4. 王炸!!IDEA 2021.1 推出语音、视频功能,边写代码边聊天,我真的服了…
  5. 解决在安装Autokroma Influx插件的 Premiere Pro for Mac m1电脑上,导入Flac/MKV/FLV文件后,拖入音轨无声音、导入失败等一系列问题?
  6. windows sublime格式化json快捷键
  7. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘
  8. 基于Sqli-Labs靶场的SQL注入-第五关(重点讲双查询注入)
  9. vue实现下拉二级联动_vue 实现二级联动
  10. python安装盒怎么打开_Python学习笔记(六)Python盒子:模块,包和程序