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 - input1 ,input2 和 target 不是Tensor。
TypeError - input1 和 input2 类型不一致。
TypeError - input1 和 target 类型不一致。
ValueError - input1 和 input2 shape不一致。
ValueError - input1 和 target 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