如果Loss异常怎么办?
首先我指的异常是Loss计算出现了明显的逻辑错误(始终为0或者为特别大的一个数字),而不是因为优化问题导致Loss不收敛,Nan这类问题。
一个令人悲伤的话题
我之前改造了一个文字检测网络使其能识别手写字体,相应地对loss部分做出了一些改动。结果训练时一开始发现Loss大的离谱,后经一番Debug后Loss成了负数!?这个问题就很尴尬了,Loss为何成了负数呢?
最后仔细排查发现是数据标注位置出现了错误,Label中出现了负数导致Loss为负 (๑•̀ㅂ•́) ✧
因为当时基于别人代码进行修改,对数据打标签的一些代码细节并没有彻底读懂,因此在改动的时候考虑不全面,闹出了Loss为负数这个天大的笑话.其实出bug再所难免,不要指望自己一次coding就全对,但是在做任务前要有一个清晰的概念,对基本的数学和逻辑原理都要心中有数;如果是改造别人的代码,需要对他人的代码有比较彻底的了解,防止忽视一些细节导致错误发生。经此一事,我总结了Loss异常Debug的一些心得体会:
Loss异常Debug思路:
1.仔细检查Loss函数的设计逻辑是否正确,如果loss由多部分组成,可以分别输出检查,缩小范围。
2.检查具体实现的函数代码,看看函数用的对不对,还有就是数据类型转换有没有错误。很多函数都需要指定axis,这部分容易弄错