mindspore.nn.MarginRankingLoss

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

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

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

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

  • reduction (str,可选) - 指定应用于输出结果的规约计算方式,可选 'none''mean''sum' ,默认值: 'mean'

    • 'none':不应用规约方法。

    • 'mean':计算输出元素的平均值。

    • 'sum':计算输出元素的总和。

输入:
  • 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)\) ,那么 target 的shape必须是 \((x_1, x_2, x_3, ..., x_R)\)

输出:

Tensor或Scalar,如果 reduction'none' ,其shape与 input1 相同。否则,将返回为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
>>> from mindspore import Tensor, nn, ops
>>> 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