oneflow.nn.MarginRankingLoss¶

class oneflow.nn.MarginRankingLoss(margin: float = 0.0, reduction: str = 'mean')

Creates a criterion that measures the loss given inputs $$x1$$, $$x2$$, two 1D mini-batch Tensors, and a label 1D mini-batch tensor $$y$$ (containing 1 or -1).

If $$y = 1$$ then it assumed the first input should be ranked higher (have a larger value) than the second input, and vice-versa for $$y = -1$$.

The loss function for each sample in the mini-batch is:

$\text{loss}(x1, x2, y) = \max(0, -y * (x1 - x2) + \text{margin})$
Parameters
• margin (float, optional) – Has a default value of $$0$$.

• reduction (string, 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 of elements in the output, 'sum': the output will be summed. Default: 'mean'

Shape:
• x1 : $$(N, D)$$ where N is the batch size and D is the size of a sample.

• x2 : $$(N, D)$$ where N is the batch size and D is the size of a sample.

• Target: $$(N)$$

• Output: scalar. If reduction is 'none', then $$(N)$$.

For example:

>>> import oneflow as flow
>>> import numpy as np
>>> x1 = flow.tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), dtype=flow.float32)
>>> x2 = flow.tensor(np.array([[2, 2, 2], [2, 2, 2], [2, 2, 2]]), dtype=flow.float32)
>>> target = flow.tensor(np.array([[1, -1, 1],[-1, 1, -1], [1, 1, 1]]), dtype=flow.float32)
>>> m = flow.nn.MarginRankingLoss(margin =1.0, reduction="none")
>>> out = m(x1, x2, target)
>>> out
tensor([[2., 1., 0.],
[3., 0., 5.],
[0., 0., 0.]], dtype=oneflow.float32)

>>> m = flow.nn.MarginRankingLoss(margin = 0.3, reduction="sum")
>>> out = m(x1, x2, target)
>>> out
tensor(8.2000, dtype=oneflow.float32)

>>> m = flow.nn.MarginRankingLoss(margin = 10, reduction="mean")
>>> out = m(x1, x2, target)
>>> out
tensor(8.3333, dtype=oneflow.float32)

__init__(margin: float = 0.0, reduction: str = 'mean')None

Initialize self. See help(type(self)) for accurate signature.

Methods

 __call__(*args, **kwargs) Call self as a function. __delattr__(name, /) Implement delattr(self, name). __dir__() Default dir() implementation. __eq__(value, /) Return self==value. __format__(format_spec, /) Default object formatter. __ge__(value, /) Return self>=value. __getattr__(name) __getattribute__(name, /) Return getattr(self, name). __gt__(value, /) Return self>value. __hash__() Return hash(self). __init__([margin, reduction]) Initialize self. __init_subclass__ This method is called when a class is subclassed. __le__(value, /) Return self<=value. __lt__(value, /) Return self