基本用法:

criterion = LossCriterion() 		# 构造函数有自己的参数
loss 	  = criterion(x, y) 		# 调用标准时也有参数

计算出来的结果已经对mini-batch取了平均

分类和回归的区别:在于输出变量的类型。
定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。



1、nn.L1Loss()

nn.L1Loss(size_average=True)

创建一个衡量输入x(模型预测输出) 和 目标y之间差的绝对值的平均值的标准。
python预测结果是标签 pytorch输出预测类别_构造函数

x 和 y 可以是任意形状,每个包含n个元素。

对n个元素对应的差值的绝对值求和,得出来的结果除以n。

如果在创建L1Loss实例的时候在构造函数中传入size_average=False,那么求出来的绝对值的和将不会除以n。



2、nn.MSELoss()

nn.MSELoss(size_average=True)

创建一个衡量输入x(模型预测输出)和目标y之间均方误差标准。

python预测结果是标签 pytorch输出预测类别_loss_02

x 和 y 可以是任意形状,每个包含n个元素。

对n个元素对应的差值的绝对值求和,得出来的结果除以n。

如果在创建MSELoss实例的时候在构造函数中传入size_average=False,那么求出来的平方和将不会除以n。



3、nn.CrossEntropyLoss()

nn.CrossEntropyLoss(weight=None, size_average=True)

此标准将LogSoftMax和NLLLoss集成到一个类中。当训练一个多类分类器的时候,这个方法是十分有用的。

  • weight(tensor): 1-D tensor,n个元素,分别代表n类的权重,如果你的训练样本很不均衡的话,是非常有用的。默认值为None。

调用时参数:

  • input : 包含每个类的得分,2-D tensor,shape为 batch*n
  • target: 大小为 n 的 1-D tensor,包含类别的索引(0到 n-1)。

Loss可以表述为以下形式:

python预测结果是标签 pytorch输出预测类别_Pytorch_03

python预测结果是标签 pytorch输出预测类别_Pytorch_04 参数被指定的时候,python预测结果是标签 pytorch输出预测类别_Pytorch_05

python预测结果是标签 pytorch输出预测类别_构造函数_06

计算出的loss对mini-batch的大小取了平均。

形状(shape):

  • Input:(N,C) C 是类别的数量
  • Target: (N) :N是mini-batch的大小,python预测结果是标签 pytorch输出预测类别_损失函数_07


4、nn.BCELoss()

nn.BCELoss(weight=None, size_average=True)

计算 target 与 output 之间的二分类交叉熵。

python预测结果是标签 pytorch输出预测类别_Pytorch_08

如果weight被指定 :

python预测结果是标签 pytorch输出预测类别_Pytorch_09

这个用于计算 auto-encoder 的 reconstruction error。注意 python预测结果是标签 pytorch输出预测类别_损失函数_10

默认情况下,loss会基于element平均,如果size_average=False的话,loss会被累加。



5、nn.MarginRankingLoss()

nn.MarginRankingLoss(margin=0, size_average=True)

创建一个标准,给定输入 python预测结果是标签 pytorch输出预测类别_损失函数_11,python预测结果是标签 pytorch输出预测类别_loss_12 两个1-D mini-batch Tensor’s,和一个python预测结果是标签 pytorch输出预测类别_python预测结果是标签_13(1-D mini-batch tensor) ,python预测结果是标签 pytorch输出预测类别_python预测结果是标签_13

如果 y=1,代表第一个输入的值应该大于第二个输入的值,如果y=-1的话,则相反。

mini-batch中每个样本的loss的计算公式如下:

python预测结果是标签 pytorch输出预测类别_Pytorch_15

如果size_average=True,那么求出的loss将会对mini-batch求平均;
反之,求出的loss会累加。默认情况下,size_average=True。



6、nn.HingeEmbeddingLoss()

nn.HingeEmbeddingLoss(size_average=True)

给定一个输入 python预测结果是标签 pytorch输出预测类别_损失函数_16 (2-D mini-batch tensor)和对应的 标签 python预测结果是标签 pytorch输出预测类别_python预测结果是标签_13

第n次小批量样品的损失函数为

python预测结果是标签 pytorch输出预测类别_损失函数_18

总损失函数是:

python预测结果是标签 pytorch输出预测类别_损失函数_19

python预测结果是标签 pytorch输出预测类别_损失函数_16python预测结果是标签 pytorch输出预测类别_python预测结果是标签_13



7、nn.MultiLabelMarginLoss()

nn.MultiLabelMarginLoss(size_average=True)

计算多标签分类的 hinge loss(margin-based loss) ,计算loss时需要两个输入:

  • input x:2-D mini-batch Tensor
  • output y: 2-D tensor表示mini-batch中样本类别的索引

python预测结果是标签 pytorch输出预测类别_python预测结果是标签_22

其中 python预测结果是标签 pytorch输出预测类别_Pytorch_23。对于所有的python预测结果是标签 pytorch输出预测类别_损失函数_24python预测结果是标签 pytorch输出预测类别_python预测结果是标签_25,满足 python预测结果是标签 pytorch输出预测类别_Pytorch_26

python预测结果是标签 pytorch输出预测类别_损失函数_16python预测结果是标签 pytorch输出预测类别_python预测结果是标签_13 必须具有同样的 size。这个标准仅考虑了第一个非零 python预测结果是标签 pytorch输出预测类别_loss_29



8、nn.SmoothL1Loss

nn.SmoothL1Loss(size_average=True)

平滑版L1 loss,loss 的公式如下:

python预测结果是标签 pytorch输出预测类别_loss_30

python预测结果是标签 pytorch输出预测类别_构造函数_31

此loss对于异常点的敏感性不如MSELoss,而且,在某些情况下防止了梯度爆炸,(参照 Fast R-CNN)。这个loss有时也被称为 Huber loss。x 和 y 可以是任何包含n个元素的tensor。默认情况下,求出来的loss会除以n,可以通过设置size_average=True 使 loss累加。



9、nn.SoftMarginLoss

nn.SoftMarginLoss(size_average=True)

创建一个标准,用来优化2分类的 logistic loss。输入为 x(一个 2-D mini-batch Tensor)和 目标y(一个包含1或 -1的Tensor)。

python预测结果是标签 pytorch输出预测类别_loss_32

如果求出的loss不想被平均可以通过设置 size_average=False。