资讯详情

资讯详情

【已解决---->“重点在后面”】win10+gpu,keras-yolov3,执行train.py训练模型,loss: nan

keras-yolov3在win10cpu下训练模型正常但同样的代码在win10gpu环境下训练模型一直显示loss:nan。1.错误信息如下Epoch 1/502021-12-24 18:31:54.894750: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll2021-12-24 18:31:57.850212: W tensorflow/stream_executor/cuda/redzone_allocator.cc:312] Internal: Invoking ptxas not supported on WindowsRelying on driver to perform ptx compilation. This message will be only logged once.2021-12-24 18:31:58.171032: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_100.dll1/19 [.............................] - ETA: 4:01 - loss: nan2/19 [...........................] - ETA: 1:57 - loss: nan3/19 [..........................] - ETA: 1:31 - loss: nan4/19 [........................] - ETA: 1:24 - loss: nan5/19 [.......................] - ETA: 1:17 - loss: nan2.解决办法如下# filter out inf/nan values encountered here: raw_true_wh K.switch(tf.is_inf(raw_true_wh), raw_true_wh, K.zeros_like(raw_true_wh)) raw_true_wh K.switch(tf.is_nan(raw_true_wh), raw_true_wh, K.zeros_like(raw_true_wh))3.注意yolov3样本集打标注时候选区域不能太小最好一张图只有一个标注框这样不影响后续检测可以检测出多个目标---------------------------------------------------------------------------------------------------------------------2022年1月5日理解补充①当图片样本集数量比较大分类比较大多时若batch_size太大本例是64lr太小本例是1e-4则loss开始就是nan原因可能是不同图片之间的差别不大lr值过小尤其是freeze_body2时只有三层数据参与计算252-249算法根本就无法计算图片之间的差异导致梯度消失所以lossnan。②训练过程中loss会在nan和数值之间波动原因是每个epoch的采样不同如果正好取的三张图片本例batch_size3同属于一个分类那么计算梯度就会非常小可能比学习率都要小这个时候loss就会是nan。下面是训练过程中的截图从上往下看。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →