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 - 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 >>> 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