Pytroch自带了很多损失函数,在阅读相关代码时总是只看到一个调用就感到很迷,故在此进行常用的损失函数公式和代码总结。
一、nn.CrossEntropyLoss()
参考链接:关于pytorch中的CrossEntropyLoss()的理解
这篇博客用通俗的例子对交叉熵损失进行了计算过程说明。在该函数中先通过softmax函数将得到的类别归一化,然后送入交叉熵损失函数进行处理。看公式感觉输入函数中的预测值和label维度不统一,nn.CrossEntropyLoss()自动将label转化为one-hot形式。
二、Focal loss
参考链接:focal loss详解
这几篇文章详细介绍了Focal
loss的设计理念是为了使得损失函数专注于这些难分辨的样本上。同时添加了一个系数用来解决类别不平衡问题。三个字不平衡
三、 Dice loss
参考链接:
损失函数 DiceLoss 的 Pytorch 实现
该链接介绍了DiceLoss操作的直观演示,并且包含了多分类如何使用Dice
loss。但是关于分母的处理只给出了直接元素相加的方法,没有给出平方后相加的方法。
语义分割任务多分类Focal loss与Dice loss pytorch实现\
这篇文章给出了常见的Focal loss和Dice loss的pytorch实现方法。
四、其它常用损失函数总结
参考链接:简单粗暴PyTorch之18个损失函数
该博客简单的介绍了pytroch实现常见的18个损失函数的代码和公式介绍。18个损失函数如下:
1.nn.CrossEntropyLoss
2.nn.NLLLoss
3.nn.BCELoss
4.nn.BCEWithLogitsLoss
5.nn.L1Loss
6.nn.MSELoss
7.nn.SmoothL1Loss
8.nn.PoissonNLLLoss
9.nn.KLDivLoss
10.nn.MarginRankingLoss
11.nn.MultiLabelMarginLoss
12.nn.SoftMarginLoss
13.nn.MultiLabelSoftMarginLoss
14.nn.MultiMarginLoss
15.nn.TripletMarginLoss
16.nn.HingeEmbeddingLoss
17.nn.CosineEmbeddingLoss
18.nn.CTCLoss
其中:
nn.CrossEntropyLoss为nn.LogSoftmax()与nn.NLLLoss()结合,进行 交叉熵计算.
nn.NLLLoss:实现负对数似然函数中的负号功能
nn.BCELoss:二分类交叉熵
BCEWithLogitsLoss:结合Sigmoid与二分类交叉熵