深度模型 loss为nan解决方案详解
1.loss为nan
深度模型进行训练的时候,经常出现loss为nan的情况。比如某一次训练过程的输出如下:
Epoch 1/501/303 [..............................] - ETA: 0s - loss: 278.5685 - accuracy: 0.0000e+0047/303 [===>..........................] - ETA: 0s - loss: nan - accuracy: 0.5745 95/303 [========>.....................] - ETA: 0s - loss: nan - accuracy: 0.5368
142/303 [=============>................] - ETA: 0s - loss: nan - accuracy: 0.5493
186/303 [=================>............] - ETA: 0s - loss: nan - accuracy: 0.5538
215/303 [====================>.........] - ETA: 0s - loss: nan - accuracy: 0.5535
248/303 [=======================>......] - ETA: 0s - loss: nan - accuracy: 0.5403
285/303 [===========================>..] - ETA: 0s - loss: nan - accuracy: 0.5439
303/303 [==============================] - 0s 1ms/step - loss: nan - accuracy: 0.5413
Epoch 2/501/303 [..............................] - ETA: 0s - loss: nan - accuracy: 1.000042/303 [===>..........................] - ETA: 0s - loss: nan - accuracy: 0.476277/303 [======>.......................] - ETA: 0s - loss: nan - accuracy: 0.4935
112/303 [==========>...................] - ETA: 0s - loss: nan - accuracy: 0.5000
150/303 [=============>................] - ETA: 0s - loss: nan - accuracy: 0.5067
190/303 [=================>............] - ETA: 0s - loss: nan - accuracy: 0.4842
230/303 [=====================>........] - ETA: 0s - loss: nan - accuracy: 0.5261
262/303 [========================>.....] - ETA: 0s - loss: nan - accuracy: 0.5458
303/303 [==============================] - 0s 1ms/step - loss: nan - accuracy: 0.5413
Epoch 3/501/303 [..............................] - ETA: 0s - loss: nan - accuracy: 0.0000e+0040/303 [==>...........................] - ETA: 0s - loss: nan - accuracy: 0.5250 83/303 [=======>......................] - ETA: 0s - loss: nan - accuracy: 0.4940
128/303 [===========>..................] - ETA: 0s - loss: nan - accuracy: 0.4688
164/303 [===============>..............] - ETA: 0s - loss: nan - accuracy: 0.5183
202/303 [===================>..........] - ETA: 0s - loss: nan - accuracy: 0.5297
247/303 [=======================>......] - ETA: 0s - loss: nan - accuracy: 0.5385
....
好家伙,一上来loss就输出为nan…今天我们针对loss为nan的情况,来做一下总结。
2.一开始loss就为nan
上面的例子,模型的输出一开始就为nan。这种情况大部分是data preprocessing(数据预处理)没做好。针对我上面的情况,做了一下简单的排查:
total_nan_values = df.isnull().sum().sum()
print('total_nan_values is: ', total_nan_values)
df = df.fillna(0)
after_total_nan_values = df.isnull().sum().sum()
print('after fillna, total_nan_values is: ', after_total_nan_values)
其中df是我的输入dataframe。经常检查发现,原始数据中na值有4个,然后做了个最简单粗暴的处理,将na值都用0填充,此时na值个数变为0,代码后续就能正常运行。
另外,如果输入的特征较大,各特征之间数值差异较大,可以先把所有特征normalization。
3.中途出现loss为nan
如果训练中途出现loss为nan的情况,一般就要针对learning rate做文章了。
在分类问题中,如果learning rate太大会认为某些数据属于错误的类概率为1,而正确类的概率为0(实际上出现了浮点数下溢)。此时交叉熵loss
−yilogy^−(1−yi)log(1−y^)-y_ilog\hat y - (1-y_i)log(1-\hat y)−yilogy^−(1−yi)log(1−y^)
也会变成无穷大。一旦出现该种情形,无穷大对参数求导会变成nan,整个网络就成了nan。
我们可以用个简单的代码测试一下上面的逻辑
def loss_test():num = np.nannum = np.log(num)print(num)loss_test()
nan
某个数为nan,此时对其求对数,也为nan。
要解决上面的问题,方法是减小学习率,甚至将学习率变为0,看看问题是否仍然存在。若问题消失,那说明确实是学习率的问题。若问题仍存在,那说明刚刚初始化的网络就已经挂掉了,很可能是实现有错误。
4.loss function定义的问题
有时候定义loss function也会导致nan的问题。比如出现log(0), x/0等,这类
计算问题也可能导致loss为nan的情况发生。
解决方法是在loss function定义是,可以加入一个小常数,我们经常在代码中见到这样一行:
eps = tf.keras.backend.epsilon
eps就是为了解决上述问题。源码中eps相关的声明如下
@keras_export('keras.backend.epsilon')
@dispatch.add_dispatch_support
def epsilon():"""Returns the value of the fuzz factor used in numeric expressions.Returns:A float.Example:>>> tf.keras.backend.epsilon()1e-07"""return _EPSILON
可见其默认值为1e-07
5.标签传值错误
标签值必须在损失函数的域中。如果使用基于对数的损失函数,所有的标签值必须是非负数。如果标签值不对也有可能出现loss为nan的情况。
参考文献
1.https://stackoverflow.com/questions/40050397/deep-learning-nan-loss-reasons
2.https://www.zhihu.com/question/62441748
深度模型 loss为nan解决方案详解相关推荐
- 【深度学习】扩散模型(Diffusion Model)详解
[深度学习]扩散模型(Diffusion Model)详解 文章目录 [深度学习]扩散模型(Diffusion Model)详解 1. 介绍 2. 具体方法 2.1 扩散过程 2.2 逆扩散过程 2. ...
- 深度残差网络(ResNet)详解与实现(tensorflow2.x)
深度残差网络(ResNet)详解与实现(tensorflow2.x) ResNet原理 ResNet实现 模型创建 数据加载 模型编译 模型训练 测试模型 训练过程 ResNet原理 深层网络在学习任 ...
- Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)
首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...
- Meta最新模型LLaMA细节与代码详解
Meta最新模型LLaMA细节与代码详解 0. 简介 1. 项目环境依赖 2. 模型细节 2.1 RMS Pre-Norm 2.2 SwiGLU激活函数 2.3 RoPE旋转位置编码 3. 代码解读 ...
- 数据脱敏和加密_Apache ShardingSphere数据脱敏全解决方案详解
解决方案详解 在了解了ShardingSphere脱敏处理流程后,即可将脱敏配置.脱敏处理流程与实际场景进行结合.所有的设计开发都是为了解决业务场景遇到的痛点.那么面对之前提到的业务场景需求,又应该如 ...
- OSI 七层模型和TCP/IP模型及对应协议(详解)
OSI 七层模型和TCP/IP模型及对应协议(详解) 查看全文 http://www.taodudu.cc/news/show-6185847.html 相关文章: OSI7层网络模型协议精析 OSI ...
- 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案例
[入门]广电行业DNS.DHCP解决方案详解(三)--DNS部署架构及案例 DNS系统部署架构 宽带业务DNS架构 互动业务DNS架构 案例介绍 案例一 案例二 本篇我们将先介绍DNS系统部署架构体系 ...
- 加载、滑动翻阅大量图片解决方案详解
加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...
- iOS开发——加载、滑动翻阅大量图片解决方案详解
目录(?)[-] 常规思路流程 使用低分辨率图 多线程任务 优化快速翻阅体验 最后还一个砍儿 加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的 ...
- iOS开发——加载、滑动翻阅大量图片解决方案详解 .
加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...
最新文章
- db9针232接口波特率标准_RS232和RS485与RS422接口的基础知识详细介绍
- spring boot 的常用注解使用 总结
- 开源示波器Scopefun介绍、原理图学习
- apache 修改最大连接数
- ITK:Delaunay贴合边缘翻转
- 无网络访问权限怎么办_解决无Internet访问权限
- 在 SAP HANA database Explorer 里添加 HDI 容器
- 用计算机打cf,CF能用的特殊符号有什么 CF特殊符号怎么打
- 分布式数据库clickhouse、tidb、palo对比
- 安装ubuntu18.04虚拟机太慢
- 资源放送丨《Oracle 12C~19C统计信息的最佳实践》PPT视频
- Cannot assign to read only property 'exports' of object '#Object'
- 2010中国十大杰出IT博客大赛—唯有行动才能改造命运
- nekohtml+xpath实例,及注意事项
- php 威盾加密解密,解析php加密解密混淆的手段,如 phpjm,phpdp神盾,php威盾
- 怎么建立局域网_用ZeroTier搭建属于自己的虚拟局域网(VLAN)
- 定时任务最简单的3种实现方法(超好用)
- 计算机数字信号和模拟信号,模拟信号和数字信号有什么区别
- 常用Dos命令以及英文全称(有道解读)
- 下载上市公司财报并可视化某科目