由于Pytorch中使用mini-batch进行计算,因此其损失函数的计算结果会对mini-batch取平均
常见的Pytorch中内置的损失函数有:
nn.L1Loss
计算input与output的差的绝对值,input与output应该是同一维度,得到的loss也是相应维度
nn.NLLLoss
Negative Log Likelihood
class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100,
reduce=None, reduction='mean')
常用于多分类任务。在NLLLoss输入input之前,我们需要对input进行log_softmax处理(即将input转换成概率分布的形式,并且取对数,底数为e)
计算公式
loss(input, class) = -input[class]
NLLLoss中如果传递了weight参数,会对损失进行加权,公式就变成了
loss(input, class) = -weight[class] * input[class]
nn.MSELoss
Mean Square Error
计算input与ouput之间的均方差
nn.CrossEntropyLoss
多分类用的交叉熵损失合函数,将LogSoftMax
和nn.NLLLoss
集成到一个类中,nn.CrossEntropyLoss
可以自动对input进行logSoftMax操作,可以理解为CrossEntropyLoss()=log_softmax() + NLLLoss()
传入weight参数后
一般多分类的情况会使用这个损失函数
nn.BCELoss
Binary Cross Entropy
计算input与output之间的二进制交叉熵
添加weight后
用的时候需要在该层前面加上 Sigmoid 函数