模型在训练时,经过某个步骤后显示为 loss = nan

Posted

技术标签:

【中文标题】模型在训练时,经过某个步骤后显示为 loss = nan【英文标题】:While the model is training, it appears as loss = nan after a certain step 【发布时间】:2021-03-08 04:04:05 【问题描述】:

我正在研究 TensorFlow 对象检测。我正在使用谷歌 Colab。。我该如何解决这个问题?

型号=ssd_efficientdet_d2

输出=

I1125 09:30:20.814607 139701278168960 model_lib_v2.py:652] Step 1400 per-step time 0.418s loss=1.650 INFO:tensorflow:Step 1500 per-step time 0.601s loss=1.285

I1125 09:31:09.918310 139701278168960 model_lib_v2.py:652] Step 1500 per-step time 0.601s loss=1.285
INFO:tensorflow:Step 1500 per-step time 0.601s loss=1.285

I1125 09:31:09.918310 139701278168960 model_lib_v2.py:652] Step 1500 per-step time 0.601s loss=1.285
INFO:tensorflow:Step 1600 per-step time 0.444s loss=1.344

I1125 09:31:59.594189 139701278168960 model_lib_v2.py:652] Step 1600 per-step time 0.444s loss=1.344
INFO:tensorflow:Step 1700 per-step time 0.511s loss=nan

I1125 09:32:49.015780 139701278168960 model_lib_v2.py:652] Step 1700 per-step time 0.511s loss=nan
INFO:tensorflow:Step 1800 per-step time 0.576s loss=nan

I1125 09:33:39.257319 139701278168960 model_lib_v2.py:652] Step 1800 per-step time 0.576s loss=nan
INFO:tensorflow:Step 1900 per-step time 0.439s loss=nan

I1125 09:34:27.547188 139701278168960 model_lib_v2.py:652] Step 1900 per-step time 0.439s loss=nan
INFO:tensorflow:Step 2000 per-step time 0.445s loss=nan

I1125 09:35:17.008013 139701278168960 model_lib_v2.py:652] Step 2000 per-step time 0.445s loss=nan
INFO:tensorflow:Step 2100 per-step time 0.490s loss=nan

I1125 09:36:08.541600 139701278168960 model_lib_v2.py:652] Step 2100 per-step time 0.490s loss=nan
INFO:tensorflow:Step 2200 per-step time 0.697s loss=nan

【问题讨论】:

你的梯度可能正在爆炸(你的损失正在上升)。降低学习率可能是一个很好的尝试, @cbk 我遇到了同样的问题。你是怎么解决的? 是的,我降低了学习率,然后问题就解决了 【参考方案1】:

我见过很多导致模型发散的事情,这可能会导致损失增加或准确性降低。

    可能是由于学习率过高,因此首先要降低学习率。 检查分类器 DNNClassifier 是否使用正确的分类器。 检查标签是否正确,是否在损失函数域中。 同时检查损失函数。有时,是输入数据没有按照损失函数的原因。 确保数据正确标准化。您可能希望像素在 [-1, 1] 而不是 [0, 255] 范围内。

【讨论】:

以上是关于模型在训练时,经过某个步骤后显示为 loss = nan的主要内容,如果未能解决你的问题,请参考以下文章

keras训练cnn模型时loss为nan

TensorFlow Object Detection目标检测模型训练时Loss急剧上升直至为NAN

深度学习在训练模型时,输出的每个参数代表啥意思?

pytorch训练时前一次迭代的loss正常后一次迭代却报nan

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

领域数据下重新预训练模型和原始bert性能分析