TripletMarginLoss¶
- class paddle.nn. TripletMarginLoss ( margin: float = 1.0, p: float = 2.0, epsilon: float = 1e-06, swap: bool = False, reduction: _ReduceMode = 'mean', name: str | None = None ) [source]
-
Creates a criterion that measures the triplet loss given an input tensors x1, x2, x3 and a margin with a value greater than 0. This is used for measuring a relative similarity between samples. A triplet is composed by input, positive and negative (i.e., input, positive examples and negative examples respectively). The shapes of all input tensors should be (N,∗).
The loss function for each sample in the mini-batch is:
L(input,pos,neg)=maxwhere
d(x_i, y_i) = \left\lVert {\bf x}_i - {\bf y}_i \right\rVert_p- Parameters
-
margin (float, Optional) – Default: 1.
p (float, Optional) – The norm degree for pairwise distance. Default: 2.
epsilon (float, Optional) – Add small value to avoid division by zero, default value is 1e-6.
swap (bool, Optional) – The distance swap change the negative distance to the distance between positive sample and negative sample. For more details, see Learning shallow convolutional feature descriptors with triplet losses. Default:
False
.reduction (str, Optional) – Indicate how to average the loss by batch_size. the candidates are
'none'
|'mean'
|'sum'
. Ifreduction
is'none'
, the unreduced loss is returned; Ifreduction
is'mean'
, the reduced mean loss is returned; Ifreduction
is'sum'
, the summed loss is returned. Default:'mean'
name (str|None, Optional) – Name for the operation (optional, default is None). For more information, please refer to Name.
- Call Parameters:
-
input (Tensor):Input tensor, the data type is float32 or float64. the shape is [N, *], N is batch size and * means any number of additional dimensions, available dtype is float32, float64.
positive (Tensor):Positive tensor, the data type is float32 or float64. The shape of label is the same as the shape of input.
negative (Tensor):Negative tensor, the data type is float32 or float64. The shape of label is the same as the shape of input.
- Returns
-
Tensor. The tensor variable storing the triplet_margin_loss of input and positive and negative.
Examples
>>> import paddle >>> input = paddle.to_tensor([[1, 5, 3], [0, 3, 2], [1, 4, 1]], dtype=paddle.float32) >>> positive= paddle.to_tensor([[5, 1, 2], [3, 2, 1], [3, -1, 1]], dtype=paddle.float32) >>> negative = paddle.to_tensor([[2, 1, -3], [1, 1, -1], [4, -2, 1]], dtype=paddle.float32) >>> triplet_margin_loss = paddle.nn.TripletMarginLoss(reduction='none') >>> loss = triplet_margin_loss(input, positive, negative) >>> print(loss) Tensor(shape=[3], dtype=float32, place=Place(cpu), stop_gradient=True, [0. , 0.57496595, 0. ]) >>> triplet_margin_loss = paddle.nn.TripletMarginLoss(margin=1.0, swap=True, reduction='mean') >>> loss = triplet_margin_loss(input, positive, negative) >>> print(loss) Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 2.40039468)
-
forward
(
input: Tensor,
positive: Tensor,
negative: Tensor
)
Tensor
forward¶
-
Defines the computation performed at every call. Should be overridden by all subclasses.
- Parameters
-
*inputs (tuple) – unpacked tuple arguments
**kwargs (dict) – unpacked dict arguments