训练过程中推理精度不变问题定位思路

1. 系统环境\n\n硬件环境(Ascend/GPU/CPU): Ascend\n\n软件环境:\n\n– MindSpore 版本: 1.8.0\n\n执行模式: 静态图(GRAPH) – Python 版本: 3.7.5\n\n– 操作系统平台: linux\n\n2. 问题\n\n网络在训练过程中同时进行推理,每完成一个epoch进行一次推理,但推理的精度始终没有变化;\n\n3. 定位思路及过程\n\n1. 每个epoch都保存了ckpt,加载ckpt查看参数,每个参数都发生了变化,说明参数是正常更新的;\n\n2. 怀疑是不是eval存在问题,使用pth转的ckpt进行推理,精度差不多,说明前向和推理存在问题的可能性不大;\n\n3. 怀疑是不是函数式的写法尚未完善,改为model.train形式进行实验,发现loss变化趋势差不多,排除;\n\n4. 打印eval时的前向结果,这是一个三分类网络,发现前向结果均为2,怀疑很大可能是训练不好导致的;\n\n5. 要到torch脚本,先排查loss函数、优化器和学习率,是对应的;对比参数初始化方法,代码上的思路相同;打印参数初始化方法中的param name,发现原意是筛选预训练模型bert的param不进行初始化,但实际代码中虽然做了筛选,但后面直接使用了self.parameter获取了所有的param,应改为cell.parameter\