『PyTorch』损失函数

1. 什么是损失函数

衡量模型输出与真实标签的差异

  • 损失函数:计算一个样本的差异
    L o s s = f ( y ^ − y ) Loss=f(\hat{y}-y) Loss=f(y^y)

  • 代价函数:计算整个样本的损失函数的平均值
    C o s t = 1 n ∑ i = 1 n f ( y ^ − y ) Cost=\frac{1}{n}\sum_{i=1}^n f(\hat{y}-y) Cost=n1i=1nf(y^y)

  • 目标函数
    O b j = C o s t + R e g u l a r i z a t i o n Obj=Cost+Regularization Obj=Cost+Regularization

size_average 和 reduce后期版本将被舍弃,不要再用了

2. PyTorch中的损失函数

2.1 nn.CrossEntropyLoss

  • 功能:nn.LogSoftmax()nn.NLLLoss()结合,进行交叉熵计算

    nn.CrossEntropyLoss(weight=None, size_average=None, 
                        ignore_index=-100, reduce=None,reduction='mean')
    
  • 主要参数:

    • weight:各类别的loss设置权值
      对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重
    • ignore_index:忽略某个类别,不参与计算loss函数值
    • reduction:计算模式,可为nonesummean
      • none:逐个元素计算,返回长度为类别数
      • sum:所有元素求和返回标量,一个值的Tensor
      • mean:加权平均返回标量,一个值的Tensor

2.2 nn.NLLLoss

  • 功能:实现负对数似然函数中的负号功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xQ7tK99T-1582603752282)(损失函数/nll_loss.png)]

  • 主要参数:
    • weight:各类别的loss设置权值
      对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重
    • ignore_index:忽略某个类别,不参与计算loss函数值
    • reduction:计算模式,可为nonesummean
      • none:逐个元素计算,返回长度为类别数
      • sum:所有元素求和返回标量,一个值的Tensor
      • mean:加权平均返回标量,一个值的Tensor

2.3 nn.BCELoss

  • 功能:二分类交叉熵

    注意,输入值取值在 [ 0 , 1 ] [0,1] [0,1]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3YJ5vDw-1582603752291)(损失函数/bce_loss.png)]

  • 主要参数:
    • weight:各类别的loss设置权值
      对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重
    • ignore_index:忽略某个类别,不参与计算loss函数值
    • reduction:计算模式,可为nonesummean
      • none:逐个元素计算,返回长度为类别数
      • sum:所有元素求和返回标量,一个值的Tensor
      • mean:加权平均返回标量,一个值的Tensor

2.4 nn.BCEWithLogitsLoss

  • 功能:结合Sigmoid与二分类交叉熵

    注意,网络最后不需要加sigmoid激活函数了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FpnXx9kY-1582603752297)(损失函数/bce_sigmoid__loss.png)]

  • 主要参数:
    • pos_weight:正样本的权值
    • weight:各类别的loss设置权值
      对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重
    • ignore_index:忽略某个类别,不参与计算loss函数值
    • reduction:计算模式,可为nonesummean
      • none:逐个元素计算,返回长度为类别数
      • sum:所有元素求和返回标量,一个值的Tensor
      • mean:加权平均返回标量,一个值的Tensor

2.5 nn.L1Loss

  • 功能:计算inputs与target之差的绝对值( l 1 l_1 l1范数误差)

    nn.L1Loss(size_average=None, reduce=None, reduction='mean')
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cwGxANwN-1582603752299)(损失函数/l1_loss.png)]

2.6 nn.MSELoss

  • 功能:计算inputs和target之差的平方( l 2 l_2 l2范数误差,或者 m 2 m_2 m2范数误差)
nn.MSELoss(size_average=None, reduce=None, reduction='mean')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1lb3zkYR-1582603752300)(损失函数/MSE_loss.png)]

2.7 nn.SmoothL1Loss

  • 功能:平滑的 l 1 l_1 l1 loss

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HJHAXEr-1582603752305)(损失函数/smooth_l1_loss.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bx7KI4dn-1582603752309)(损失函数/l1_loss_figure.png)]

2.8 nn.PoissonNLLLoss

  • 功能:破松分布的负对数似然函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcgn3YlX-1582603752313)(损失函数/poisson_nll_loss.png)]

  • 主要参数:
    • log_input:输入是否为对数形式,决定计算公式
    • full:计算所有loss,默认False
    • eps:修正项,避免 log ⁡ ( i n p u t ) \log(input) log(input) N a N NaN NaN

2.9 nn.KLDivLoss

  • 功能:计算KL散度,相对熵

2.10 nn.MarginRankingLoss

  • 功能:计算两个向量之间的相似度,用于排序任务

2.11 nn.MultiLabelMarginLoss

  • 功能:多标签边界损失函数

2.12 nn.SoftMarginLoss

  • 功能:计算二分类的Logistic损失

2.13 nn.MultiLabelSoftMarginLoss

  • 功能:SoftMarginLoss的多标签版本

2.14 nn.MultiMarginLoss

  • 功能:计算多分类的折页损失

2.15 nn.TripletMarginLoss

  • 功能:计算三元组损失,人脸验证中常用

2.16 nn.HingeEmbeddingLoss

  • 功能:计算两个输入的相似性,常用于迁移学习和半监督学习

2.17 nn.CosineEmbedingLoss

  • 功能:采用余弦相似度计算两个输入的相似性

2.18 nn.CTCLoss

  • 功能:计算CTC损失,解决时序类数据的分类损失,人脸验证中常用

2.16 nn.HingeEmbeddingLoss

  • 功能:计算两个输入的相似性,常用于迁移学习和半监督学习

2.17 nn.CosineEmbedingLoss

  • 功能:采用余弦相似度计算两个输入的相似性

2.18 nn.CTCLoss

  • 功能:计算CTC损失,解决时序类数据的分类
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值