Pytorch常用损失函数nn.BCEloss();nn.BCEWithLogitsLoss();nn.CrossEntropyLoss();nn.L1Loss(); nn.MSELoss();(代码

Posted 小葵花幼儿园园长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytorch常用损失函数nn.BCEloss();nn.BCEWithLogitsLoss();nn.CrossEntropyLoss();nn.L1Loss(); nn.MSELoss();(代码相关的知识,希望对你有一定的参考价值。

nn.BCEloss()

  • 衡量输出与目标之间的二分类交叉熵
  • 功能:二分类交叉熵,输入值取值在[0,1]
    在这里插入图片描述
torch.torch.nn.BCELoss(weight=None, reduction='mean')
  • weight: 默认None,用于计算损失的手动尺度化的权重、张量
  • reduction:默认mean, 指定用于输出的缩减方式,另可选:none、sum;none:不应用缩减,mean:输出的和除以输出内元素数;sum:输出加和
  • 输入:input – 形状为 ( N , ∗ ) \\left ( N,* \\right ) (N,),N为样本数量,*为任意其他维度
  • 输入:target – 形状 ( N , ∗ ) \\left ( N,* \\right ) (N,),形状同input
  • 输出:output – 标量(reduction若为none,则形状同input)

nn.BCEWithLogitsLoss()

  • 此损失函数将 Sigmoid 层和 BCELoss 整合在一起

  • 比简单地将 Sigmoid 层加上 BCELoss 损失更稳定,因为使用了 log-sun-exp 技巧获得数值稳定性
    在这里插入图片描述

torch.nn.BCEWithLogitsLoss(
				weight=None, 
				reduction='mean', 
				pos_weight=None
			)
  • weight:默认 None,用于计算损失的手动尺度化的权重,张量

  • reduction:默认 ‘mean’,指定应用于输出的缩减方式,另可选 ‘none’,‘sum’;‘none’:不应用缩减;‘mean’:输出的和除以输出内元素数;‘sum’:输出加和

  • pos_weight:默认 None,正例的权重,需为长度为类别数的向量;

  • 输入:input – 形状为,为样本数量,为任意其他维度

  • 输入:target – 形状,形状同input

  • 输出:output – 标量(reduction若为none,则形状同input)

nn.CrossEntropyLoss

nn.CrossEntropyLoss(
		weight=None,
		size_average=None,
		ignore_index=-100,
		reduce=None,
		reduction=‘mean’
		)
  • weight:各类别的loss设置权值
  • ignore_index:忽略某个类别
  • reduction :计算模式,可为none/sum/mean,none- 逐个元素计算,sum- 所有元素求和,返回标量,mean- 加权平均,返回标量

在这里插入图片描述

nn.L1Loss

  • 功能: 计算inputs与target之差的绝对值
    在这里插入图片描述

nn.MSELoss

  • 功能: 计算inputs与target之差的平方
    在这里插入图片描述

nn.KLDivLoss

  • 功能:计算KLD(divergence),KL散度,相对熵
  • 注意事项:需提前将输入计算 log-probabilities,如通过nn.logsoftmax()
    在这里插入图片描述

以上是关于Pytorch常用损失函数nn.BCEloss();nn.BCEWithLogitsLoss();nn.CrossEntropyLoss();nn.L1Loss(); nn.MSELoss();(代码的主要内容,如果未能解决你的问题,请参考以下文章

pytorch常用损失函数

详解pytorch中的交叉熵损失函数nn.BCELoss()nn.BCELossWithLogits(),二分类任务如何定义损失函数,如何计算准确率如何预测

pytorch 交叉熵损失教程(3)-torch.nn.BCELoss

小曾带你深入浅出机器学习(小白入门必备,近3万字带你了解机器学习)

我更改了标量类型 float 的预期对象,但在 Pytorch 中仍然得到 Long

Sigmoid 与二元交叉熵损失