常见的分类损失函数学习笔记:
以下主要简述基于逻辑回归和交叉熵相关的四个损失函数torch.nn.BCELoss和torch.nn.BCEWithLogitsLoss,torch.nn.NLLLoss和torch.nn.CrossEntropyLoss。
1-torch.nn.NLLLoss和torch.nn.CrossEntropyLoss函数
多用于多分类任务,对每个值求softmax之后,输出结果表示输入样本属于制定类别的概率值,所有输出结果和为1,不同类别之间相关且互斥。
其区别与联系在于:CrossEntropyLoss= softmax+log+NLLLoss;
该部分与softmax函数息息相关,进行loss计算前必须进行softmax函数计算,保证不同类别的预测概率只和为1,确保不同类别之间的互斥属性。
2-torch.nn.BCELoss和torch.nn.BCEWithLogitsLoss函数
作为一组常用的二元交叉熵损失函数。多用于单标签二分类或者多标签二分类问题,对每一个值求sigmoid之后,将结果映射到0~1之间,不保证不同类别之间的输出结果和为1,不同类别之间相互独立但不互斥。
其区别与联系在于:BCEWithLogitsLoss = sigmoid+BCELoss;
该部分loss与sigmoid激活层强强相关,计算loss前,必须通过sigmoid激活计算,保证loss计算过程的输入为0~1之间,同时不同类别之间有没有相关关系。
注意:
当进行二分类的时候,采用torch.nn.NLLLoss或者torch.nn.CrossEntropyLoss函数时,网络最后一层的输出需要是(batchsize,2),且每一个样本对应的输出的类别概率和为1;
当采用torch.nn.BCELoss或者torch.nn.BCEWithLogitsLoss函数时,网络最后一层的输出为(batchsize,1),输出结果在0~1之间。
个人理解:
在具体应用上,无论是通过sigmoid激活函数的输出结果还是softmax的输出结果,其结果都在0~1之间表示预测概率。值得提到的是,sigmoid输出结果中不同类别之间没有相关关系,softmax输出的不同类别之间存在互斥关系。