mindspore.ops.margin_ranking_loss

mindspore.ops.margin_ranking_loss(input1, input2, target, margin=0.0, reduction='mean')[源代码]

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

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

\[\text{loss}(input1, input2, target) = \max(0, -target * (input1 - input2) + \text{margin})\]
参数:
  • 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)\)

  • margin (float, 可选) - 指定运算的调节因子。默认值: 0.0

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

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

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

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

返回:

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, ops
>>> import numpy as np
>>> 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 = ops.Sign()(Tensor(np.array([-2, -2, 3]), ms.float32))
>>> output = ops.margin_ranking_loss(input1, input2, target)
>>> print(output)
1.2293333