Function ‘MseLossBackward0‘ returned nan values in its 0th output.
这个比较奇怪的提示来自于Pytorch计算梯度的过程中产生了一个nan
值。
如果开启了:
torch.autograd.set_detect_anomaly(True)
那么在loss.backward()
的时候就会出现这个提示。
为什么会出现这的情况呢?
在pytorch的一个讨论中出现过这个问题,链接:https://discuss.pytorch.org/t/function-mselossbackward-returned-nan-values-in-its-0th-output/94875。
讨论中有提到:
x = torch.randn(1, 1, requires_grad=True)
y = torch.zeros(1, 1)
criterion = nn.MSELoss()loss = torch.sqrt(criterion(x * 0, y))
loss.backward()
print(x.grad)
> tensor([[nan]])
那么问题就很明显了,因为在loss
的计算中出现了不可求导的情况,导致了梯度计算出现nan
值。所以在写损失函数时需要注意计算过程中的那些可能导致求导失败的操作。
那是不是数学上不能计算出梯度的函数在pytorch中也不能计算梯度呢?答案是否定的。
进行如下简单的试验:
torch.autograd.set_detect_anomaly(True)x = torch.randn(1, requires_grad=True)loss = torch.abs((x * 0)) # abs的0值是不会导致backward出现问题的。# loss = torch.sqrt(loss) # sqrt的0值会导致backward计算出nan的数据。loss.backward()print(x.grad)
输出:
tensor([0.])
当去掉torch.sqrt()
的注释后,输出:
Traceback (most recent call last):File "d:/Code/python/base-python/my_torch.py", line 183, in <module>gradient()File "d:/Code/python/base-python/my_torch.py", line 160, in gradientloss.backward()File "C:\ProgramData\Anaconda3\lib\site-packages\torch\_tensor.py", line 307, in backwardtorch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)File "C:\ProgramData\Anaconda3\lib\site-packages\torch\autograd\__init__.py", line 154, in backwardVariable._execution_engine.run_backward(
RuntimeError: Function 'AbsBackward0' returned nan values in its 0th output.
ERROR conda.cli.main_run:execute(33): Subprocess for 'conda run ['python', 'd:/Code/python/base-python/my_torch.py']' command failed. (See above for error)
成功地触发了error。
所以,虽然绝对值函数在0处应当是没有梯度定义的,但是在pytorch中没有问题,而取平方根函数会有问题。
那么怎么处理这种情况呢?一个比较简单的方法是添加一个微量的偏移,如下:
torch.autograd.set_detect_anomaly(True)x = torch.randn(1, requires_grad=True)loss = torch.abs((x * 0))+1e-6 # abs的0值是不会导致backward出现问题的。loss = torch.sqrt(loss) # sqrt的0值会导致backward计算出nan的数据。loss.backward()print(x.grad)
输出
tensor([0.])
Function ‘MseLossBackward0‘ returned nan values in its 0th output.相关推荐
- Error:function ‘LogSoftmaxBackward‘ returned nan values in its 0th output.
Error:function 'LogSoftmaxBackward' returned nan values in its 0th output. 原因分析 产生这个问题的原因可能有几种: 1.数据 ...
- PyTorch RuntimeError: Function ‘CudnnBatchNormBackward0‘ returned nan values in its 0th output. 解决方法
1. 查看输入是否含有nan或者全是0 2. 查看最后的loss是否是nan 3. 最难debug的一点是当learning rate过高的时候也会报题目中的错
- 【Pytorch】反向传播为NaN报错的排查解决方法,RuntimeError: Function ‘BmmBackward0‘ returned nan values
最近在训练模型的过程中,反复出现方向传播至为NaN的报错,报错信息如下所示: File "/home/fu/anaconda3/envs/torch/lib/python3.7/site-p ...
- TensorFlow | ReluGrad input is not finite. Tensor had NaN values
问题的出现 Question 这个问题是我基于TensorFlow使用CNN训练MNIST数据集的时候遇到的.关键的相关代码是以下这部分: cross_entropy = -tf.reduce_sum ...
- PyTorch出现RuntimeError: Function AddBackward0 returned an invalid gradient at index 1
感谢下面这篇文章,问题解决了: https://blog.csdn.net/andyL_05/article/details/107952479 报错是这样的: RuntimeError: Funct ...
- TypeError: The view function for did not return a valid response. The function either returned None
TypeError: The view function for 'uploadImg' did not return a valid response. The function either re ...
- TypeError The view function did not return a valid response. The function either returned None 的解决
使用flask框架制作登录.注册的页面时,app.py运行成功,数据库有用户,1234,密码也是1234 点击登录之后, 报如下错误. TypeError TypeError: The view fu ...
- RuntimeError: Function CdistBackward returned an invalid gradient
报错:RuntimeError: Function CdistBackward returned an invalid gradient at index 1 – got [2,7,7] but ex ...
- This function does not fully set the dimensions of output port 2 .
在调simulink仿真的过程中,如果simulink文件包含MATLAB function和s-function等模块需要编写代码的模块,可能会碰见"This function does ...
最新文章
- 腾讯“科学探索奖”提名报名正式启动
- 2019 Mac装Cocoapods的步(cai)骤(keng)记录
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
- linux python syslog,Centos下python 对syslog重写进行日志记录
- Premature Optimization
- 五个你绝不可忽视的HTML5特性
- C++ 中重载 + 操作符的正确方法
- Java的poi技术遍历Excel时进行空Cell,空row,判断
- 模拟数据集上训练神经网络,网络解决二分类问题练习
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题...
- docker swarm集群
- sap系统webservice接口开发
- 中国石油大学《测井解释与生产测井》第三阶段在线作业
- 用计算机读取三菱PLC程序,电脑如何读取与保存三菱plc数据?
- 运行 Clojure 编程实战 5.3 节代码出现 Could not locate Clojure resource on classpath 问题
- angular中的变更检测机制
- cdr文件过大导出pdf打不开_cdr导出pdf 文件有问题怎么办
- ARKit和SceneKit
- sql语句 四表联查
- 企业网络组建项目实训--交换机的配置与管理(下)
热门文章
- miui11可用的位置模拟器_miui11支持机型汇总_miui11支持哪些机型_软吧下载
- 计算机打开查看方式默认是什么样,如何更改win10系统电脑图片的查看方式 怎么将电脑图片查看方式改成缩略图...
- CAD转PDF如何修改背景颜色
- 威斯康星大学计算机科学教授,美国威斯康星大学周家振访问沈阳自动化所
- 荐读解惑 | FPGA是有门槛的,零基础并不是你想的那样,不要再被忽悠了!
- redis sadd 命令 以及 删除set集合或者单独删除set中的一/多条记录
- 【HDOJ】6441--Find Integer
- C#(Csharp)基础教程(上)(菜鸟教程笔记)
- 困在双11“流量仓”的小红书,能否撑起200亿美元估值?
- 禁用MacOS系统自带输入法最简单的方法