第三磅 ——深度学习损失函数大全

一 十七个损失函数(前三个貌似常用些,后面的没怎么见过)

1)L1loss

功能:计算输出与输入之差的绝对值,可返回一个标量或者一个tensor类型;

class torch.nn.L1Loss(size_average=None,reduce=None)
# reduce:填写bool型,当为True时:返回值为标量;反之,返回tensor类型
#当size_average=True时,返回loss的平均值;当size_average=False,返回各样本的Loss之和;

2)MSELoss (又称L2loss)

如何选择L1loss和L2loss损失函数?

答:看异常数据值了,若把异常数据值当作数据处理,那么用L1;若为了把异常数据剔除出来,那么用L2;

功能:计算输出与输入之差的平方,可选返回一个标量或者一个tensor类型;

class torch.nn.MSELoss(size_average=None,reduce=None,reduction='elementwise_mean')
#各个分量的填写见L1Loss

3)crossEntropyLoss(又称对数似然函数)

将输入经过softmax激活函数之后,再计算其与target的交叉熵损失。即方法将nn.LogSoftmax()和nn.NLLLoss()进行了结合。严格意义上的交叉熵损失函数应该是nn.NLLLoss()

class torch.nn.CrossEntropyLoss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction='elementwise_mean')
#weight(tensor):给每个类别的Loss设置权值,必须为float型的tensor;
#ignore_index(int):忽略某一类别,不计算其loss,除的时候分母也不会统计那一类,总之,这一列压根就不会出现在任何地方;

为啥引入softmax?

因为交叉熵——反映俩概率分布的差异; 神经网络的输出——为向量

softmax作用——将向量转化为0-1之间的概率分布

4)NLLloss (此方法可由交叉熵损失函数法代替)

应用场景:多用于多分类任务,但是输入之前需要对输入进行log_softmax函数激活,即将输入转化为概率分布的形式,并求取对数

class torch.nn.NLLloss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction='elementwise_mean')

5)PoissionNllloss (此方法用于target为泊松分布的任务)

class torch.nn.Possionloss(long_input=True,full=False,size_average=None,eps=1e-8,reduce=None,reduction='elementwise_mean')
#long_input:[True]:(公式为:loss(input,target)=exp(input)-target*input)/ [Flase]:(公式为:loss(input,target)=input-#   target*log(input+eps))
#full:是否计算所有的loss
#eps(float):增加的一个修正项

6)KLDIVLoss

功能:计算输入与目标的KL散度

KL散度:相对熵,用于描述两个概率分布之间的差异

class torch.nn.KLDVLoss(size_average=None,reduce=None,reduction='elementwise_mean')

想要获得真正的KL散度,需进行如下操作:

1)reduce=True;size_average=False

2)计算得到的Loss要对batch求取平均;

7) BCELoss (交叉熵损失函数的特例)

class torch.nn.BCEILoss(weight=None,size_average=None,reduce=None,reduction='elementwise_mean')

8)BCEWithLogitsLoss(sigmoid函数与BCELoss损失函数叠加使用)

class torch.nn.BCEWithLogitsLoss(weight=None,size_average=None,reduce=None,reduction='elementwise_mean',pos_weight=None)
#pos_weight:正样本的权重;p>1:提高召回率;p<1:提高精确度

9) MarginRankingLoss (计算两个向量间的相似度)

class torch.nn.MarginRankingLoss(margin=0,size_average=None,reduce=None,reduction='elementwise_mean')

当两个向量间的距离大于margin时,loss为正,反之,loss为0.

10) HingeEmbeddingLoss (用于半监督学习或者非线性映射的时候用)

11) MultiLabelMarginLoss (用于样本属于多个类别时的分类任务。例:样本1属于类A,类B,不属于类C和类D)

12) SmoothL1Loss(优化L1Loss,解决了L1Loss在0处不可导的问题)

class torch.nn.SmoothL1Loss(size_average=None,reduce=None,reduction='elementwise_mean')

13) softMarginLoss

14) multiLabelSoftMarginLoss

15) cosineEmbeddingLoss (用cosine函数衡量两个输入是否相似) 【适用】:半监督学习 or 非线性映射

16) MultiMarginLoss(用于多分类的折页损失)

17) TripletMarginLoss(计算三元组损失,人脸验证中常用,不研究不考虑,pass!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值