pytorch当中及机器学习中常用的18种损失函数总结

1.CrossEntropyLoss 交叉熵损失函数

loss_f = nn.CrossEntropyLoss(weight=None, reduction='none')

功能:nn.LogSoftmax()与nn.NLLLoss()结合,进行交叉熵计算
主要参数:
weight=None :各类别loss设置权值
ignore_index=-100 :忽略某个类别
reduction=”mean” :计算模式,可为none/sum/mean
none-逐个元素计算
sum-所有元素求和,返回标量
mean-加权平均,返回标量

2.NLLLoss 负对数似然损失函数

loss_f = nn.NLLLoss(weight=weights, reduction='none')

功能:实现负对数似然函数中的负号功能
主要参数:
weight=None : 各个类别的loss设置权值
ignore_index=-100: 忽略某个类别
reduction=”mean”: 计算模式,可为none/sum/mean

3.BCELoss

loss_f = nn.BCELoss(weight=weights, reduction='none')

功能:二分类交叉熵,注意事项,输入值取值在[0,1]
主要参数:
weight=None : 各个类别的loss设置权值
ignore_index=-100: 忽略某个类别
reduction=”mean”: 计算模式,可为none/sum/mean

4.BCEWithLogitsLoss

loss_f = nn.BCEWithLogitsLoss(weight=weights, reduction='none')

功能:结合Sigmoid与二分类交叉熵。注意事项:网络最后不加Sigmoid函数
主要参数:
weight=None: 各个类别的loss设置权值
ignore_index=-100: 忽略某个类别
reduction=”mean”: 计算模式,可为none/sum/mean
pos_weight=None: 正样本的权值

5.L1Loss

loss_f = nn.L1Loss(reduction='none')

功能:计算inputs与target之差的绝对值
主要参数:
reduction=”mean”: 计算模式,可为none/sum/mean

6.MSELoss

loss_f = nn.MSELoss(reduction='none')

功能:计算inputs与target之差的平方
主要参数:
reduction=”mean”: 计算模式,可为none/sum/mean

7.SmoothL1Loss

loss_f = nn.SmoothL1Loss(reduction='none')

功能:就是平滑版的L1 Loss
主要参数:
reduction=”mean”: 计算模式,可为none/sum/mean

8.PoissonNLLLoss

loss_f = nn.PoissonNLLLoss(log_input=True, full=False, reduction='none')

功能:泊松分布的负对数似然函数
主要参数:
log_input:输入是否为对数形式,决定计算公式
full:计算所有loss,默认为false
eps:修正项,避免log(input)为nan

9.KLDivLoss

loss_f = nn.KLDivLoss(reduction='none')

功能:计算KLD,KL散度,相对熵。注意事项:需提前将输入计算log-probabilities
主要参数:
reduction=“mean”: 计算模式,可为none/sum/mean/batchmean

10.MarginRankingLoss

loss_f = nn.MarginRankingLoss(margin=0, reduction='none')

功能:计算两个向量 之间的相似度,用于排序任务
特别说明:该方法计算两组数据之间的差异,返回一个n*n的loss矩阵
主要参数:
margin:边界值,x1与x2之间的差异值
reduction="mean: 计算模式,可为none/sum/mean

11.MultiLableMarginLoss

loss_f = nn.MultiLabelMarginLoss(reduction='none')

功能:多标签边界损失函数
主要参数:
reduction="mean: 计算模式,可为none/sum/mean

12.SoftMarginLoss

loss_f = nn.SoftMarginLoss(reduction='none')

功能:计算二分类的logistic损失
主要参数:
reduction="none: 计算模式,可为none/sum/mean

13.MultiLableSoftMarginLoss

loss_f = nn.MultiLabelSoftMarginLoss(reduction='none')

功能:SoftMarginLoss多标签版本
主要参数:
weight:各类别的loss设置权值
reduction="none: 计算模式,可为none/sum/mean

14.MultiMarginLoss

loss_f = nn.MultiMarginLoss(reduction='none')

功能:计算多分类的折页损失
主要参数:
p:可选1或2
weight:各类别的loss设置权值
margin:边界值
reduction="none: 计算模式,可为none/sum/mean

15.TripletMarginLoss

loss_f = nn.TripletMarginLoss(margin=1.0, p=1)

功能:计算三元组损失,人脸验证中常用
主要参数:
p:范数的阶,默认为2
margin:边界值
reduction="none: 计算模式,可为none/sum/mean

16.nn.HingeEmbeddingLoss

loss_f = nn.HingeEmbeddingLoss(margin=1, reduction='none')

功能:计算两个输入的相似性,常用与非线性embedding和半监督学习。注意事项:输入x应为两个输入之差的绝对值
主要参数:
margin:边界值
reduction="none: 计算模式,可为none/sum/mean

17.CosineEmbeddingLoss

loss_f = nn.CosineEmbeddingLoss(margin=0., reduction='none')

功能:采用余弦相似度计算两个输入的相似性
主要参数:
margin:可取值[-1,1],推荐为[0,0.5]
reduction="none: 计算模式,可为none/sum/mean

18.CTCLoss

ctc_loss = nn.CTCLoss()

功能:计算CTC损失,解决时序类数据的分类
主要参数
blank:blank label
zero_infinity:无穷大的值或梯度置0
reduction="none: 计算模式,可为none/sum/mean

备注:根据深度之眼课程总结