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)−yi​logy^​−(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解决方案详解相关推荐

  1. 【深度学习】扩散模型(Diffusion Model)详解

    [深度学习]扩散模型(Diffusion Model)详解 文章目录 [深度学习]扩散模型(Diffusion Model)详解 1. 介绍 2. 具体方法 2.1 扩散过程 2.2 逆扩散过程 2. ...

  2. 深度残差网络(ResNet)详解与实现(tensorflow2.x)

    深度残差网络(ResNet)详解与实现(tensorflow2.x) ResNet原理 ResNet实现 模型创建 数据加载 模型编译 模型训练 测试模型 训练过程 ResNet原理 深层网络在学习任 ...

  3. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)

    首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...

  4. Meta最新模型LLaMA细节与代码详解

    Meta最新模型LLaMA细节与代码详解 0. 简介 1. 项目环境依赖 2. 模型细节 2.1 RMS Pre-Norm 2.2 SwiGLU激活函数 2.3 RoPE旋转位置编码 3. 代码解读 ...

  5. 数据脱敏和加密_Apache ShardingSphere数据脱敏全解决方案详解

    解决方案详解 在了解了ShardingSphere脱敏处理流程后,即可将脱敏配置.脱敏处理流程与实际场景进行结合.所有的设计开发都是为了解决业务场景遇到的痛点.那么面对之前提到的业务场景需求,又应该如 ...

  6. OSI 七层模型和TCP/IP模型及对应协议(详解)

    OSI 七层模型和TCP/IP模型及对应协议(详解) 查看全文 http://www.taodudu.cc/news/show-6185847.html 相关文章: OSI7层网络模型协议精析 OSI ...

  7. 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案例

    [入门]广电行业DNS.DHCP解决方案详解(三)--DNS部署架构及案例 DNS系统部署架构 宽带业务DNS架构 互动业务DNS架构 案例介绍 案例一 案例二 本篇我们将先介绍DNS系统部署架构体系 ...

  8. 加载、滑动翻阅大量图片解决方案详解

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

  9. iOS开发——加载、滑动翻阅大量图片解决方案详解

    目录(?)[-] 常规思路流程 使用低分辨率图 多线程任务 优化快速翻阅体验 最后还一个砍儿 加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的 ...

  10. iOS开发——加载、滑动翻阅大量图片解决方案详解 .

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

最新文章

  1. db9针232接口波特率标准_RS232和RS485与RS422接口的基础知识详细介绍
  2. spring boot 的常用注解使用 总结
  3. 开源示波器Scopefun介绍、原理图学习
  4. apache 修改最大连接数
  5. ITK:Delaunay贴合边缘翻转
  6. 无网络访问权限怎么办_解决无Internet访问权限
  7. 在 SAP HANA database Explorer 里添加 HDI 容器
  8. 用计算机打cf,CF能用的特殊符号有什么 CF特殊符号怎么打
  9. 分布式数据库clickhouse、tidb、palo对比
  10. 安装ubuntu18.04虚拟机太慢
  11. 资源放送丨《Oracle 12C~19C统计信息的最佳实践》PPT视频
  12. Cannot assign to read only property 'exports' of object '#Object'
  13. 2010中国十大杰出IT博客大赛—唯有行动才能改造命运
  14. nekohtml+xpath实例,及注意事项
  15. php 威盾加密解密,解析php加密解密混淆的手段,如 phpjm,phpdp神盾,php威盾
  16. 怎么建立局域网_用ZeroTier搭建属于自己的虚拟局域网(VLAN)
  17. 定时任务最简单的3种实现方法(超好用)
  18. 计算机数字信号和模拟信号,模拟信号和数字信号有什么区别
  19. 常用Dos命令以及英文全称(有道解读)
  20. 下载上市公司财报并可视化某科目

热门文章

  1. Linux硬盘分区与文件系统---学习笔记
  2. 4-MSP430定时器_定时器中断
  3. CodeForces 650A Watchmen
  4. T-SQL连接查询,基础连接理解
  5. FLEX 字符串处理函数
  6. 如何获取maven命令执行后成功与否的返回值
  7. Linux系统grep查日志用法
  8. 20180529 Linux配置ip 排查问题
  9. ASP.NET vNext MVC 6 电商网站开发实战
  10. 基于原生javascript的淡入淡出函数封装(兼容IE)