1.二分类
交叉熵loss
调用BCE或者CrossEntropy都可以,区别是调BCE要自己加sigmoid,调用CrossEntropy是系统默认调用Softmax激活函数
2.多分类(不互斥)
该函数非常简单,就是对于每个类别求二分类损失函数,得到一个,list,再对该list求sum/mean
3.多分类(互斥)
在Pytorch中CrossEntropy函数
先看一下官方文档
先从该函数的出发点考虑,我们希望,正例的概率偏向1,负例的概率偏向0,如果不满足的话,我们将惩罚它们,此时softmax函数就可以帮我们做到该功能。观察上式,分子为exp(x[class]),为正例的概率,分母为负例+正例的概率,当正例的概率偏离1时,整个式子变大,当负例偏离0时候,整个式子变大。此外softmax还起到了归一化的效果。接下来在接一个log函数,这样便得到我们的第一个函数接口LogSoftmax,接下来再接一个NLLLoss(negative log likelihood loss),该函数就是将label对应的LogSoftmax输出结果求平均,得到最终输出
该函数实现的时候,我觉得可以直接实现后面的一个式子,对每个example的输出1.exp2.sum3.log并加上对应label的输出值的负数。log(sum)一定会大于前面的负数,所以放心,最终的loss一定是正值,这样的话backward也很好求。
最后说一下函数forward接口
x,是一个batch*C的tensor
class就是具体类别,是一个B的tensor