mindspore.nn.MultilabelMarginLoss
- class mindspore.nn.MultilabelMarginLoss(reduction='mean')[source]
Creates a loss criterion that minimizes the hinge loss for multi-class classification tasks. It takes a 2D mini-batch Tensor \(x\) as input and a 2D Tensor \(y\) containing target class indices as output.
Each sample in the mini-batch, the loss is computed as follows:
\[\text{loss}(x, y) = \sum_{ij}\frac{\max(0, 1 - (x[y[j]] - x[i]))}{\text{x.size}(0)}\]where \(x \in \left\{0, \; \cdots , \; \text{x.size}(0) - 1\right\}\), \(y \in \left\{0, \; \cdots , \; \text{y.size}(0) - 1\right\}\), \(0 \leq y[j] \leq \text{x.size}(0)-1\), and for all \(i\) and \(j\), \(i\) does not equal to \(y[j]\).
Furthermore, both \(y\) and \(x\) should have identical sizes.
Note
For this operator, only a contiguous sequence of non-negative targets that starts at the beginning is taken into consideration, which means that different samples can have different number of target classes.
- Parameters
reduction (str, optional) – Apply specific reduction method to the output:
'none'
,'mean'
,'sum'
. Default:"mean"
.
- Inputs:
x (Tensor) - Predict data. Tensor of shape \((C)\) or \((N, C)\), where \(N\) is the batch size and \(C\) is the number of classes. Data type must be float16 or float32.
target (Tensor) - Ground truth data, with the same shape as x, data type must be int32 and label targets padded by -1.
- Outputs:
y (Union[Tensor, Scalar]) - The loss of MultilabelMarginLoss. If reduction is “none”, its shape is \((N)\). Otherwise, a scalar value will be returned.
- Raises
TypeError – If x or target is not a Tensor.
TypeError – If dtype of x is neither float16 nor float32.
TypeError – If dtype of target is not int32.
ValueError – If length of shape of x is neither 1 nor 2.
ValueError – If shape of x is not the same as target.
ValueError – If reduction is not one of ‘none’, ‘mean’, ‘sum’.
- Supported Platforms:
Ascend
GPU
Examples
>>> import mindspore as ms >>> import mindspore.nn as nn >>> import numpy as np >>> loss = nn.MultilabelMarginLoss() >>> x = ms.Tensor(np.array([[0.1, 0.2, 0.4, 0.8], [0.2, 0.3, 0.5, 0.7]]), ms.float32) >>> target = ms.Tensor(np.array([[1, 2, 0, 3], [2, 3, -1, 1]]), ms.int32) >>> output = loss(x, target) >>> print(output) 0.325