常用的一个分类的损失函数是:交叉熵函数
但是真的理解了吗?虽然之前做过图像分类,但是一直没有深入研究,我今天才真正的理解并且记住了它。
pytorch中的交叉熵函数在是 torch.nn中是 CrossEntropyLoss()。
对于二分类问题(一般 标签为 【0,1】),交叉函数公式表示为:
在二分类中,我们通过神经网络的到一个映射值,随后会通过sigmoid函数,输出一个概率值,反映该样本是正例的可能性,即概率越大,可能性越大。(这里会有一个似然函数的概念,似然函数简单的理解就是 所有可能发生的可能性【记一下,后面补充更好的理解】)
sigmoid函数:
将网络的输出映射到[0,1]之间的数值概率上,即为交叉熵函数中的那个预测概率输出(
)。
或预测输出表征当前样本label为1的概率:
因此样本label为0 时,概率为:
将上面的两个公式整理为:
希望
越大越好,反之,需要让
的负值越小越好,由此引入了最初的损失函数。
对于多分类,就意味着对每个标签类别下的的可能概率分别求相应的
并求和:
上面的二分类,可以用y,1-y代表1,0。多分类的时候要把类别各写各的,所以看起来变成了一半,其实是一样的!!!
在pytorch中使用 CrossEntropyLoss()时,不需要自己再做sigmoid或者softmax辽。参考下面这个博客,非常详细。要注意,target类型要转为torch.long().