问题描述:
在使用官方脚本训练retinanet时训练几轮后,报错无法计算loss,停止训练
我的数据集为coco格式,修改了配置文件种类等,制作mindrecord格式的文件后进行训练报错,请问可能是什么原因呢,数据集按照流程修改的
Start train retinanet, the first epoch will be slower because of the graph compilation.
epoch: 1 step: 18, loss is 5384.2744140625
lr:[0.000002]
epoch time: 63417.263 ms, per step time: 3523.181 ms
epoch: 2 step: 18, loss is 5357.0615234375
lr:[0.000003]
epoch time: 14948.870 ms, per step time: 830.493 ms
[CRITICAL] ME(20589:140329160312640,MainProcess):2022-05-31-16:48:08.808.295 [mindspore/dataset/engine/datasets.py:2778] Uncaught exception:
Traceback (most recent call last):
File "train.py", line 212, in <module>
main()
File "/home/ai/anaconda3/zxl/retinanet/src/model_utils/moxing_adapter.py", line 113, in wrapped_func
run_func(*args, **kwargs)
File "train.py", line 208, in main
model.train(config.epoch_size, dataset, callbacks=cb, dataset_sink_mode=True)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/model.py", line 906, in train
sink_size=sink_size)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/model.py", line 87, in wrapper
func(self, *args, **kwargs)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/model.py", line 548, in _train
self._train_dataset_sink_process(epoch, train_dataset, list_callback, cb_params, sink_size)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/model.py", line 633, in _train_dataset_sink_process
list_callback.step_end(run_context)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/callback/_callback.py", line 226, in step_end
cb.step_end(run_context)
File "/home/ai/anaconda3/envs/zxl/lib/python3.7/site-packages/mindspore/train/callback/_loss_monitor.py", line 80, in step_end
cb_params.cur_epoch_num, cur_step_in_epoch))
ValueError: epoch: 3 step: 18. Invalid loss, terminating training.
解答:您好,根据您的报错信息,问题原因为训练过程中loss跑飞了,框架lossmonitor检测到异常,训练下去无意义,所以自动停止了,需要您自己逐步排查一下您的训练脚本,一般可能是学习率设置的不合适,或者节点激活过度等等。
loss跑飞不收敛不是调低loss就有用的,loss作为一个评价指标不知道你咋调的,调低学习率只是一个建议,这个是最常见的训练问题,可以采用二分法定位,推荐采用以下思路进行排查:
1.检查数据和标签,数据分类是否准确,数据是否干净,数据是否正常,data label是否一致,一般来说不收敛都是由于样本信息量太大导致网络不足以fit整个样本空间。
2.学习率设定不合理(此条已被你排除)
3.网络设定不合理,例如很复杂的分类任务但是使用的网络过浅,可以尝试换网络或者加深网络。
4.检查数据集lable是否有错。
5.检查是否归一化。
上述方法仅提供一个排查思路,并不代表问题就来自这里,具体需要你自己分析修改调试自己的训练脚本和网络。