• mindspore训练retinanet时报错无法计算loss,停止训练


    问题描述:

    在使用官方脚本训练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.检查是否归一化。

    上述方法仅提供一个排查思路,并不代表问题就来自这里,具体需要你自己分析修改调试自己的训练脚本和网络。

  • 相关阅读:
    配置实验室服务器环境(记录一些坑)
    理解RNN以及模型搭建代码
    ElementPlus el-date-picker日期时间选择器组件禁用此刻之前的时间(精确时分秒)
    华为数据管理——《华为数据之道》
    SpringBoot实现SSE构建实时数据单向推送
    04-HotSpot 垃圾收集器
    Docker从入门到进阶之进阶操作(1)—— 对Docker的网络进行管理
    安卓APP:有读写权限,却读取不到照片的怪事
    Dubbo3.0系列(6)- Dubbo3.0支持的RPC协议
    Omniverse:开发人员的元宇宙
  • 原文地址:https://blog.csdn.net/weixin_45666880/article/details/125505735