TripletMarginWithDistanceLoss
-
class torch.nn.modules.loss.TripletMarginWithDistanceLoss(*, distance_function=None, margin=1.0, swap=False, reduction='mean')[source] -
Создаёт функцию потерь, вычисляющую триплетную функцию потерь по входным тензорам , и (соответственно представляющим якорный, положительный и отрицательный примеры), а также по неотрицательной вещественнозначной функции («функции расстояния»), используемой для вычисления взаимосвязи между якорным и положительным примерами («положительное расстояние») и между якорным и отрицательным примерами («отрицательное расстояние»).
Функцию потерь без редукции (т. е. при
reduction, установленном в'none') можно представить следующим образом:где — размер пакета; — неотрицательная вещественнозначная функция, характеризующая близость двух тензоров, называемая
distance_function; а — неотрицательный отступ, представляющий минимальную разницу между положительным и отрицательным расстояниями, необходимую для того, чтобы функция потерь равнялась 0. Каждый входной тензор содержит элементов и может иметь любую форму, поддерживаемую функцией расстояния.Если
reductionне равно'none'(по умолчанию'mean'), то:См. также
TripletMarginLoss, вычисляющий триплетную функцию потерь для входных тензоров с использованием расстояния в качестве функции расстояния.- Параметры:
-
-
distance_function (Callable, необязательный) – Неотрицательная вещественнозначная функция, характеризующая близость двух тензоров. Если не задана, будет использоваться
nn.PairwiseDistance. По умолчанию:None - margin (float, необязательный) – Неотрицательный отступ, представляющий минимальную разницу между положительным и отрицательным расстояниями, необходимую для того, чтобы функция потерь равнялась 0. Большие значения отступа усиливают штраф в случаях, когда отрицательные примеры недостаточно удалены от якорей относительно положительных. По умолчанию: .
-
swap (bool, необязательный) – Использовать ли замену расстояния, описанную в статье
Learning shallow convolutional feature descriptors with triplet lossesавторства V. Balntas, E. Riba и др. Если значение True и положительный пример ближе к отрицательному примеру, чем якорь, при вычислении функции потерь положительный пример и якорь меняются местами. По умолчанию:False. -
reduction (str, необязательный) – Задает (необязательную) редукцию для выходных данных:
'none'|'mean'|'sum'.'none': редукция не применяется,'mean': сумма выходных значений делится на количество элементов в выходных данных,'sum': выходные значения суммируются. По умолчанию:'mean'
-
distance_function (Callable, необязательный) – Неотрицательная вещественнозначная функция, характеризующая близость двух тензоров. Если не задана, будет использоваться
- Форма:
-
- Входные данные: , где обозначает любое количество дополнительных размерностей, поддерживаемых функцией расстояния.
- Выходные данные: тензор формы , если
reductionравно'none', или скаляр в противном случае.
Примеры:
>>> # Initialize embeddings >>> embedding = nn.Embedding(1000, 128) >>> anchor_ids = torch.randint(0, 1000, (1,)) >>> positive_ids = torch.randint(0, 1000, (1,)) >>> negative_ids = torch.randint(0, 1000, (1,)) >>> anchor = embedding(anchor_ids) >>> positive = embedding(positive_ids) >>> negative = embedding(negative_ids) >>> >>> # Built-in Distance Function >>> triplet_loss = \ >>> nn.TripletMarginWithDistanceLoss(distance_function=nn.PairwiseDistance()) >>> output = triplet_loss(anchor, positive, negative) >>> output.backward() >>> >>> # Custom Distance Function >>> def l_infinity(x1, x2): >>> return torch.max(torch.abs(x1 - x2), dim=1).values >>> >>> triplet_loss = ( >>> nn.TripletMarginWithDistanceLoss(distance_function=l_infinity, margin=1.5)) >>> output = triplet_loss(anchor, positive, negative) >>> output.backward() >>> >>> # Custom Distance Function (Lambda) >>> triplet_loss = ( >>> nn.TripletMarginWithDistanceLoss( >>> distance_function=lambda x, y: 1.0 - F.cosine_similarity(x, y))) >>> output = triplet_loss(anchor, positive, negative) >>> output.backward()
- Ссылка:
-
V. Balntas и др.: Learning shallow convolutional feature descriptors with triplet losses: https://bmva-archive.org.uk/bmvc/2016/papers/paper119/index.html
-
forward(anchor, positive, negative)[source] -
Выполняет прямой проход.
- Тип возвращаемого значения:
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.modules.loss.TripletMarginWithDistanceLoss.html