• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    pytorch中常用的损失函数用法说明

    1. pytorch中常用的损失函数列举

    pytorch中的nn模块提供了很多可以直接使用的loss函数, 比如MSELoss(), CrossEntropyLoss(), NLLLoss() 等

    官方链接: https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html

    pytorch中常用的损失函数
    损失函数 名称 适用场景
    torch.nn.MSELoss() 均方误差损失 回归
    torch.nn.L1Loss() 平均绝对值误差损失 回归
    torch.nn.CrossEntropyLoss() 交叉熵损失 多分类
    torch.nn.NLLLoss() 负对数似然函数损失 多分类
    torch.nn.NLLLoss2d() 图片负对数似然函数损失 图像分割
    torch.nn.KLDivLoss() KL散度损失 回归
    torch.nn.BCELoss() 二分类交叉熵损失 二分类
    torch.nn.MarginRankingLoss() 评价相似度的损失
    torch.nn.MultiLabelMarginLoss() 多标签分类的损失 多标签分类
    torch.nn.SmoothL1Loss() 平滑的L1损失 回归
    torch.nn.SoftMarginLoss() 多标签二分类问题的损失

    多标签二分类

    2. 比较CrossEntropyLoss() 和NLLLoss()

    (1). CrossEntropyLoss():

    torch.nn.CrossEntropyLoss(weight=None,   # 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用
                              size_average=None, 
                              ignore_index=-100, 
                              reduce=None, 
                              reduction='mean' )
    

    参数:

    weight: 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用, 默认为None.

    计算公式:

    weight = None时:

    weight ≠ None时:

    输入:

    output: 网络未加softmax的输出

    target: label值(0,1,2 不是one-hot)

    代码:

    loss_func = CrossEntropyLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)
    loss = loss_func(output, target)

    (2). NLLLoss():

    torch.nn.NLLLoss(weight=None, 
                    size_average=None, 
                    ignore_index=-100,
                    reduce=None, 
                    reduction='mean')

    输入:

    output: 网络在logsoftmax后的输出

    target: label值(0,1,2 不是one-hot)

    代码:

    loss_func = NLLLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)
    loss = loss_func(output, target)


    (3). 二者总结比较:

    总之, CrossEntropyLoss() = softmax + log + NLLLoss() = log_softmax + NLLLoss(), 具体等价应用如下:

    ####################---CrossEntropyLoss()---#######################
     
    loss_func = CrossEntropyLoss()
    loss = loss_func(output, target)
     
    ####################---Softmax+log+NLLLoss()---####################
     
    self.softmax = nn.Softmax(dim = -1)
     
    x = self.softmax(x)
    output = torch.log(x)
     
    loss_func = NLLLoss()
    loss = loss_func(output, target)
     
    ####################---LogSoftmax+NLLLoss()---######################
     
    self.log_softmax = nn.LogSoftmax(dim = -1)
     
    output = self.log_softmax(x)
     
    loss_func = NLLLoss()
    loss = loss_func(output, target)

    补充:常用损失函数用法小结之Pytorch框架

    在用深度学习做图像处理的时候,常用到的损失函数无非有四五种,为了方便Pytorch使用者,所以简要做以下总结

    1)L1损失函数

    预测值与标签值进行相差,然后取绝对值,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.L1Loss

    2)L2损失函数

    预测值与标签值进行相差,然后取平方,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.MSELoss

    3)Huber Loss损失函数

    简单来说就是L1和L2损失函数的综合版本,结合了两者的优点,公式可见下,Pytorch调用函数:nn.SmoothL1Loss

    4)二分类交叉熵损失函数

    简单来说,就是度量两个概率分布间的差异性信息,在某一程度上也可以防止梯度学习过慢,公式可见下,Pytorch调用函数有两个,一个是nn.BCELoss函数,用的时候要结合Sigmoid函数,另外一个是nn.BCEWithLogitsLoss()

    5)多分类交叉熵损失函数

    也是度量两个概率分布间的差异性信息,Pytorch调用函数也有两个,一个是nn.NLLLoss,用的时候要结合log softmax处理,另外一个是nn.CrossEntropyLoss

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • PyTorch的SoftMax交叉熵损失和梯度用法
    • Pytorch十九种损失函数的使用详解
    • pytorch交叉熵损失函数的weight参数的使用
    • pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
    • Python机器学习pytorch交叉熵损失函数的深刻理解
    上一篇:Pytorch训练网络过程中loss突然变为0的解决方案
    下一篇:Pytorch BCELoss和BCEWithLogitsLoss的使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    pytorch中常用的损失函数用法说明 pytorch,中常,用的,损失,函数,