Rate this Page

MultiMarginLoss#

classtorch.nn.modules.loss.MultiMarginLoss(p=1,margin=1.0,weight=None,size_average=None,reduce=None,reduction='mean')[source]#

Creates a criterion that optimizes a multi-class classification hingeloss (margin-based loss) between inputxx (a 2D mini-batchTensor) andoutputyy (which is a 1D tensor of target class indices,0yx.size(1)10 \leq y \leq \text{x.size}(1)-1):

For each mini-batch sample, the loss in terms of the 1D inputxx and scalaroutputyy is:

loss(x,y)=imax(0,marginx[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)}

wherei{0,  ,  x.size(0)1}i \in \left\{0, \; \cdots , \; \text{x.size}(0) - 1\right\}andiyi \neq y.

Optionally, you can give non-equal weighting on the classes by passinga 1Dweight tensor into the constructor.

The loss function then becomes:

loss(x,y)=iw[y]max(0,marginx[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
  • p (int,optional) – Has a default value of11.11 and22are the only supported values.

  • margin (float,optional) – Has a default value of11.

  • weight (Tensor,optional) – a manual rescaling weight given to eachclass. If given, it has to be a Tensor of sizeC. Otherwise, it istreated as if having all ones.

  • size_average (bool,optional) – Deprecated (seereduction). By default,the losses are averaged over each loss element in the batch. Note that forsome losses, there are multiple elements per sample. If the fieldsize_averageis set toFalse, the losses are instead summed for each minibatch. Ignoredwhenreduce isFalse. Default:True

  • reduce (bool,optional) – Deprecated (seereduction). By default, thelosses are averaged or summed over observations for each minibatch dependingonsize_average. Whenreduce isFalse, returns a loss perbatch element instead and ignoressize_average. Default:True

  • reduction (str,optional) – Specifies the reduction to apply to the output:'none' |'mean' |'sum'.'none': no reduction will be applied,'mean': the sum of the output will be divided by the number ofelements in the output,'sum': the output will be summed. Note:size_averageandreduce are in the process of being deprecated, and in the meantime,specifying either of those two args will overridereduction. Default:'mean'

Shape:
  • Input:(N,C)(N, C) or(C)(C), whereNN is the batch size andCC is the number of classes.

  • Target:(N)(N) or()(), where each value is0targets[i]C10 \leq \text{targets}[i] \leq C-1.

  • Output: scalar. Ifreduction is'none', then same shape as the target.

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...)
forward(input,target)[source]#

Runs the forward pass.

Return type

Tensor