TripletMarginWithDistanceLoss
-
class torch.nn.TripletMarginWithDistanceLoss(*, distance_function=None, margin=1.0, swap=False, reduction='mean')[исходный код] -
Создает функцию потерь, вычисляющую триплетные потери для входных тензоров , и (представляющих соответственно опорные, положительные и отрицательные примеры), а также неотрицательную вещественнозначную функцию («функцию расстояния»), используемую для вычисления расстояния между опорным и положительным примером («положительное расстояние») и между опорным и отрицательным примером («отрицательное расстояние»).
Нередуцированные потери (то есть при
reduction, установленном в'none') можно описать следующим образом:где — размер пакета; — неотрицательная вещественнозначная функция, измеряющая близость двух тензоров, называемая
distance_function; а — неотрицательный отступ, представляющий минимальную разницу между положительным и отрицательным расстояниями, необходимую для получения нулевых потерь. Каждый входной тензор содержит элементов и может иметь любую форму, поддерживаемую функцией расстояния.Если
reductionне равно'none'(по умолчанию'mean'), то:См. также
TripletMarginLoss, которая вычисляет триплетные потери для входных тензоров, используя расстояние в качестве функции расстояния.- Параметры:
-
-
distance_function (Callable, optional) – Неотрицательная вещественнозначная функция, измеряющая близость двух тензоров. Если не указана, будет использоваться
nn.PairwiseDistance. По умолчанию:None - margin (float, optional) – Неотрицательный отступ, представляющий минимальную разницу между положительным и отрицательным расстояниями, необходимую для получения нулевых потерь. Большие значения отступа сильнее штрафуют случаи, когда отрицательные примеры расположены недостаточно далеко от опорных по сравнению с положительными примерами. По умолчанию: .
-
swap (bool, optional) – Использовать ли замену расстояния, описанную в статье
Learning shallow convolutional feature descriptors with triplet lossesВ. Балнтаса, Э. Рибы и др. Если значение True и положительный пример ближе к отрицательному, чем опорный пример, то при вычислении потерь положительный пример и опорный пример меняются местами. По умолчанию:False. -
reduction (str, optional) – Задает (необязательное) сведение результатов:
'none'|'mean'|'sum'.'none': сведение не выполняется,'mean': сумма результатов делится на количество элементов в результате,'sum': результаты суммируются. По умолчанию:'mean'
-
distance_function (Callable, optional) – Неотрицательная вещественнозначная функция, измеряющая близость двух тензоров. Если не указана, будет использоваться
- Форма:
-
- Вход: , где обозначает любое количество дополнительных измерений, поддерживаемых функцией расстояния.
- Выход: тензор формы , если
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()
- Литература:
-
В. Балнтас и др.: Обучение неглубоких сверточных дескрипторов признаков с помощью триплетных потерь: https://bmva-archive.org.uk/bmvc/2016/papers/paper119/index.html
-
forward(anchor, positive, negative)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
© 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.TripletMarginWithDistanceLoss.html