本文主要是介绍解决交叉熵损失不收敛的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在训练一个分类类网络的时候,发现损失不收敛,网络的各个部分没有问题,输入输出都是正常的情况,但就是网络的损失不收敛,最开始的交叉熵损失在6左右,一直到50个epoch以后,损失依然是5左右,map 和rank1都很扎心。
后来分析后发现,最后的分类网络送出来的各个值都太小了,使得经过softmax后的各个类别的概率差异不大,为了解决这个问题,在将分类网络送出的结果,在送入交叉熵损失函数之前,加一个temperature就可以了。
1.下面的代码是不收敛的一个伪代码,分类网络送出来以后,直接送入了交叉熵损失函数,结果不收敛
prob = self.classifier(x)
loss = self.crossentropyloss(prob,label)
2.下面的代码是收敛的,分类网路送出来以后,将这个输出除以一个温度系数,可以调节softmax输出的差异性,相当于是让softmax的分布更锐化一些
prob = self.classifier(x)
prob = prob / self.temp
loss = self.crossentropyloss(prob,label)
我将temp设置为0.1,具体是多少,可以自行设定
这篇关于解决交叉熵损失不收敛的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!