问题1、softmax分类的loss最后会停在0.6931这个值
原因分析:在分类层使用了keras.layers.Lambda,导致分类器没有可训练的参数,因此没有分类能力,即,无论是否为object,softmax的输出都是0.5,根据loss公式计算得到0.6931。
解决方案:将keras.layers.Lambda换成keras的Layer类。
参考链接:https://blog.csdn.net/weixin_34343689/article/details/88111552
问题2、分类和回归的loss都慢慢变为NaN
原因分析:训练数据中有脏数据。在生成batch数据时,由于每个样本中,labels的个数和可用的anchors个数不一定相同,所以存放数据的矩阵中有一些填充的0,导致了脏数据。
解决方案:在使用数据前先把多余的0删除。
问题3、使用多GPU训练时,loss会突然变成NaN
原因分析:这个问题和上个问题很像,所以也是数据的问题。在解决上个问题时,其中anchor_offsets数据中本身就含有很多0,因为只有anchor和label有重合的时候offset才有用,否则都为0。因此在删除多余的0时误删了anchor_offsets中原本的数据,导致训练数据出现了问题,训练不正确。
解决方案:根据anchor_to_use的个数,只删除数据最后多余的0。