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 input (a 2D mini-batchTensor) andoutput (which is a 1D tensor of target class indices,):
For each mini-batch sample, the loss in terms of the 1D input and scalaroutput is:
whereand.
Optionally, you can give non-equal weighting on the classes by passinga 1D
weighttensor into the constructor.The loss function then becomes:
- Parameters
p (int,optional) – Has a default value of. andare the only supported values.
margin (float,optional) – Has a default value of.
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 (see
reduction). 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. IgnoredwhenreduceisFalse. Default:Truereduce (bool,optional) – Deprecated (see
reduction). By default, thelosses are averaged or summed over observations for each minibatch dependingonsize_average. WhenreduceisFalse, returns a loss perbatch element instead and ignoressize_average. Default:Truereduction (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_averageandreduceare in the process of being deprecated, and in the meantime,specifying either of those two args will overridereduction. Default:'mean'
- Shape:
Input: or, where is the batch size and is the number of classes.
Target: or, where each value is.
Output: scalar. If
reductionis'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...)