文章目录
Cross Entropy Loss (CE)被经常用在分类问题中,但之前也没仔细了解过其中一些细节。本博客主要针对Pytorch中对CE的支持,但也结合了对TensorFlow中的CE的支持。
其中本博客参考总结了大量其他博客的内容,在文中给出了链接,这些知识需要读者们按需自己点开阅读。但由于CE其实很基本,大家多了解一点CE的由来,Pytorch和TensorFlow对其工程上的实现,也没什么坏处。码字不易,读者若是觉得有用,请点个赞支持一下博主。
起因
最常见的分类问题是类间互斥的分类,也就是说网络输出的每个类的score要送入Softmax,以达到所有类别的prob在0~1之间,而且加起来等于1。但其实有些分类问题不是类间互斥,例如一张图片中既包含猫,也包含狗。
其实我关注到这个问题的原因是,在检测问题中,有个要预测的值是表示“box是否是包含object,objectness”,这本身是一个0-1分类问题。但随着检测方法的发展,这个值的label变的并不是0或1,而是加入了iou等一些考虑因素,也就是label=objectness*IoU(pred_box,gt_box)。
这就出现了两个问题:
1)label不再是0-1
2) 所有类别prob加起来也不再是1
这就使得pytorch中的CrossEntropyLoss不再适用。以下部分将对如下方面进行详解:
1)CE的由来
2)Tensorflow中的CE是怎么定义的
3)pytorch中的CE是怎么定义的
4)pytorch中CE和BCE等的区别
Cross Entropy Loss的由来
网上有很多,我主要是看的这个知乎回答,通过这个回答我们可以得到如下结论:
1)CE的由来可以由信息熵,KL散度推得
2)如果使用sigmoid