MultiMarginLoss — PyTorch 2.7 documentation (original) (raw)

class torch.nn.MultiMarginLoss(p=1, margin=1.0, weight=None, size_average=None, reduce=None, reduction='mean')[source][source]

Creates a criterion that optimizes a multi-class classification hinge loss (margin-based loss) between input xx (a 2D mini-batch Tensor) and output yy (which is a 1D tensor of target class indices,0≤y≤x.size(1)−10 \leq y \leq \text{x.size}(1)-1):

For each mini-batch sample, the loss in terms of the 1D input xx and scalar output yy is:

loss(x,y)=∑imax⁡(0,margin−x[y]+x[i])px.size(0)\text{loss}(x, y) = \frac{\sum_i \max(0, \text{margin} - x[y] + x[i])^p}{\text{x.size}(0)}

where i∈{0, ⋯ , x.size(0)−1}i \in \left\{0, \; \cdots , \; \text{x.size}(0) - 1\right\}and i≠yi \neq y.

Optionally, you can give non-equal weighting on the classes by passing a 1D weight tensor into the constructor.

The loss function then becomes:

loss(x,y)=∑iw[y]∗max⁡(0,margin−x[y]+x[i])px.size(0)\text{loss}(x, y) = \frac{\sum_i w[y] * \max(0, \text{margin} - x[y] + x[i])^p}{\text{x.size}(0)}

Parameters

Shape:

Examples:

loss = nn.MultiMarginLoss() x = torch.tensor([[0.1, 0.2, 0.4, 0.8]]) y = torch.tensor([3])

0.25 * ((1-(0.8-0.1)) + (1-(0.8-0.2)) + (1-(0.8-0.4)))

loss(x, y) tensor(0.32...)