神经网络训练过程中出现loss为nan,神经元坏死

本文讲述了在使用TensorFlow2实现FasterRCNN模型时遇到训练loss变为nan的问题。通过详细debug,作者发现nan的产生原因是由于目标物体位于图像边缘,导致目标框和先验框匹配不佳,进而影响损失计算。解决方案包括损失截断、数据替换、调整先验框生成策略以及优化损失函数。该问题加深了作者对FasterRCNN的理解,并提出了解决类似问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在手撸Tensorflow2版本的Faster RCNN模型,稍后会进行整理。但在准备好了模型和训练数据之后的训练环节中出现了大岔子,即训练过程中loss变为nan。nan表示not a number类型,任意有关nan的运算结果都将得到nan。这可真是一颗老鼠屎坏了一锅粥,一但一个step中出现loss为nan,所有神经元的参数都将被更新为nan,之后的epochs和step中所有预测结果和模型参数都将为nan。

        为了弄清楚nan的原因,我检查了每个组件函数以及所用的训练数据是否有误,结果显示都是没问题的。怀疑参数设置,怀疑模型流程写错了.....在大量debug之后,终于找到了症结所在。

1、为什么会出现nan?

nan在数学表示上表示一个无法表示的数,一般表示一个非浮点数(比如无理数)。inf不同于nan,inf是一个超过浮点表示范围的浮点数,其本质仍然是一个数,只是他为无穷大。

在numpy数组中,这些计算会产生nan的结果:

仔细debug整个训练过程, 用如下代码段捕获nan的出现(因为在python中nan不会报错)

import numpy as np

if np.any(np.isnan(contents)):
    print('contents contain nan')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值