mindspore.nn.MarginRankingLoss

class mindspore.nn.MarginRankingLoss(margin=0.0, reduction='mean')[源代码]

排序损失函数,用于创建一个衡量给定损失的标准。

给定两个Tensor \(x1\)\(x2\) ,以及一个Tensor标签 \(y\) ,值为1或-1,公式如下:

\[\text{loss}(x1, x2, y) = \max(0, -y * (x1 - x2) + \text{margin})\]
参数:
  • margin (float) - 指定运算的调节因子。默认值:0.0。

  • reduction (str) - 指定输出结果的计算方式。可选值为”none”、”mean”或”sum”,分别表示不指定计算方式、使用均值计算和使用求和计算。默认值:”mean”。

输入:
  • input1 (Tensor) - 输入Tensor,shape \((N,*)\) ,其中 * 代表任意数量的附加维度。

  • input2 (Tensor) - 输入Tensor,shape \((N,*)\) 。shape和数据类型与 input1 相同。

  • target (Tensor) - 输入值为1或-1。假设 input1 的shape是 \((x_1, x_2, x_3, ..., x_R)\) ,那么 labels 的shape必须是 \((x_1, x_3, x_4, ..., x_R)\)

输出:

Tensor或Scalar,如果 reduction 为”none”,其shape与 labels 相同。否则,将返回为Scalar。

异常:
  • TypeError - margin 不是float。

  • TypeError - input1input2target 不是Tensor。

  • TypeError - input1input2 类型不一致。

  • TypeError - input1target 类型不一致。

  • ValueError - input1input2 shape不一致。

  • ValueError - input1target shape不一致。

  • ValueError - reduction 不为”none”,”mean”或”sum”。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore as ms
>>> import mindspore.nn as nn
>>> import mindspore.ops as ops
>>> from mindspore.ops import Tensor
>>> import numpy as np
>>> loss1 = nn.MarginRankingLoss(reduction='none')
>>> loss2 = nn.MarginRankingLoss(reduction='mean')
>>> loss3 = nn.MarginRankingLoss(reduction='sum')
>>> sign = ops.Sign()
>>> input1 = Tensor(np.array([0.3864, -2.4093, -1.4076]), ms.float32)
>>> input2 = Tensor(np.array([-0.6012, -1.6681, 1.2928]), ms.float32)
>>> target = sign(Tensor(np.array([-2, -2, 3]), ms.float32))
>>> output1 = loss1(input1, input2, target)
>>> print(output1)
[0.98759997 0.         2.7003999 ]
>>> output2 = loss2(input1, input2, target)
>>> print(output2)
1.2293333
>>> output3 = loss3(input1, input2, target)
>>> print(output3)
3.6879997