解决mmdetection训练过程loss为nan的问题
我之前遇到多次loss为nan,一次是由于数据标注出现问题,换不同的模型参数均出现此问题,因此需要仔细检查数据格式;有一次是换了个neck的结构,loss变为nan,后面通过将学习率调为原来的1/10(根据实际情况调整),就没有出现了;还有一次是注释掉fp16训练即可。下面参考了官方文档给出的解决方案以及自身经验,应该可以解决大部分问题。
检查数据的标注是否正常, 长或宽为 0 的框可能会导致回归 loss 变为 nan,一些小尺寸(宽度或高度小于 1)的框在数据增强(例如,instaboost)后也会导致此问题。 因此,可以检查标注并过滤掉那些特别小甚至面积为 0 的框,并关闭一些可能会导致 0 面积框出现数据增强。
降低学习率:由于某些原因,例如 batch size 大小的变化, 导致当前学习率可能太大。 您可以降低为可以稳定训练模型的值。
optimizer = dict(type='AdamW', lr=0.0001, betas=(0.9, 0.999), weight_decay=0.05, # 0.001paramwise_cfg=dict(custom_keys={'absolute_pos_embed': dict(decay_mult=0.),'relative_position_bias_table': dict(decay_mult=0.),'norm': dict(decay_mult=0.)}))
延长 warm up 的时间:一些模型在训练初始时对学习率很敏感,您可以把
warmup_iters
从 500 更改为 1000 或 2000。lr_config = dict(policy='step',warmup='linear',warmup_iters=500, # 修改这里 Epoch [1][500/xxxx]之前的学习率的意思warmup_ratio=0.001,step=[8, 11])
添加 gradient clipping: 一些模型需要梯度裁剪来稳定训练过程。 默认的
grad_clip
是None
, 你可以在 config 设置optimizer_config=dict(_delete_=True, grad_clip=dict(max_norm=35, norm_type=2))
如果你的 config 没有继承任何包含optimizer_config=dict(grad_clip=None)
, 你可以直接设置optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2))
.optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
不使用fp16训练: 如果用了fp16训练,可尝试将其注释掉。
# fp16 = dict(loss_scale=512.)
参考:
常见问题解答 — MMDetection 2.19.0 文档
解决mmdetection训练过程loss为nan的问题相关推荐
- 网络nan的原因_训练网络loss出现Nan解决办法
训练网络loss出现Nan解决办法 一.原因 一般来说,出现NaN有以下几种情况: 1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率.可以不断降低学习率直 ...
- 使用caffe训练时Loss变为nan的原因
极视角高校计算机视觉算法邀请赛目前正在报名中,欢迎各高校在读学生报名参加,大奖+商业项目参与机会+数据库等你来拿!!!咨询报名请加小助手(微信号:Extreme-Vision) 本文为极市平台原创编译 ...
- 模型训练过程中产生NAN的原因分析
模型训练过程中产生NAN的原因分析 在模型的训练过程中发现,有时在经过多轮训练后loss会突然变为nan.loss变为nan也就使权重更新后的网络里的参数变为了nan,这样就使整个训练无法再进行下去了 ...
- Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题
Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...
- 炼丹师的自我修养:如何分析训练过程loss异常
作者 | 风影忍着@知乎 整理 | NewbeeNLP 本文从数据与标签.模型以及如何通过train loss与test loss分析网络当下的状况三个大方面去总结了神经网络训练过程中不收敛或者训练失 ...
- 训练中Loss为Nan的原因,梯度消失或者爆炸的优化
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 现象 如何确定是否出现梯度爆炸? 在训练过程中出现梯度爆炸会伴随一些细微的信号,如: (1)模 ...
- 如何解决神经网络训练时loss不下降的问题
本文转载,原文链接:https://blog.ailemon.me/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/ 当我们训练一个神经网络模型 ...
- 《深度学习笔记》——在训练过程中出现nan的调试笔记
1 出现nan的理论分析 从本质上来说,"出现nan"现象主要是因为数值超出当前数据类型的表示范围,其含义是指"Not a Number",常在浮点数运算中出现 ...
- 解决模型训练过程中显存不释放,不断累加导致爆显存
问题:在模型训练的过程中,自己手动加入了每隔2000轮测试一下模型在测试集上的效果,结果24G的显存每次到4000轮也就是测试两次就爆掉显存了,后来通过验证找到了问题,并且在测试代码段最后加入torc ...
最新文章
- python 乱序数组,list等有序结构的方法
- 硬科技凭什么产业化?
- ajax java用户名查重_Django之AJAX
- linux命令chmod
- 浅入深出Vue:文章编辑
- [sh]rm -rf*的防护和普通用户执行命令
- php写浏览记录,php如何浏览历史记录
- 基于Hbase的用户评分协同过滤推荐算法
- mongoose只更新数组中某一项的字段
- java接收uniapp上传的图片_uni-app 上传图片的坑
- 冲刺一团队五亲亲精英队
- 读书笔记(第五、六周)
- 网络操控软件兴起:思科利润率受压
- 互换性与测量技术基础知识点总结
- 设置chrome浏览器在一个标签页中打开链接自动跳转到新标签页
- 安卓手机微信怎么恢复聊天记录?方法简单轻松搞定
- Golang sync.Cond 简介与用法
- 记一次互联网寒冬下的阿里面试总结
- 程序员女朋友的相册是这样的
- 1688API详情接口调用展示