解决交叉熵损失不收敛的问题

最近在训练一个分类类网络的时候,发现损失不收敛,网络的各个部分没有问题,输入输出都是正常的情况,但就是网络的损失不收敛,最开始的交叉熵损失在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,具体是多少,可以自行设定

你可能感兴趣的:(深度学习,pytorch)