test error training error(【已解决】ERROR:The testing results of the whole dataset is empty)
问题描述
使用MMdetection复现论文swin Transformer ,显示错误:ERROR:The testing results of the whole dataset is empty
,与此同时 ,各项评价指标如AP,AR结果趋于零 ,F1值变成-1 ,loss与grad_norm爆炸增加 ,具体情形如下图:
图1: 图2: 图3:问题分析
看到报错的第一眼 ,猜测可能是数据集的问题 ,所以检查了数据集的路径 ,然后检查了数据集里面是否有图片 ,但经过一番验证 ,排除了这种可能性 。如果数据集本身有问题 ,代码一开始就无法运行起来,因为mmdet一定会报错 ,而且报错内容是:找不到数据集或者说找不到某张图片 。
再仔细观察报错:ERROR:The testing results of the whole dataset is empty,拿不到测试结果 ,结合爆炸的loss与grad_morm,我有理由怀疑是梯度爆炸或者梯度消失所导致的 。有了这个猜测,我回头审视自己的代码 ,最有可能导致梯度爆炸的超参数就是学习率lr ,是不是我自己设置的学习率lr不合适?
学习率是啥?
学习率是梯度下降多次迭代过程中 ,用来控制模型学习进度的超参数 。可以这么理解 ,学习率大就学的快(梯度下降块) ,学习率小就学得慢 ,但学习率并非越大越好 ,学习率过大 ,容易造成梯度爆炸或者消失 。解决办法
MMdetection默认的学习率 ,大多都是0.02 ,如果不刻意更改 ,模型会使用这个学习率去训练 ,swin Transformer没办法在lr=0.02条件下训练,将学习率更改为论文设定的0.0001 ,模型就正常训练 。
在MMdetection中 ,学习率的调整是在目录:configs/base/schedules/schedule_1x.py文件中:
学习率调整后的正常的训练结果:
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!