TripletMarginLoss
-
class torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, size_average=None, reduce=None, reduction='mean')[source] -
Создаёт функцию потерь, вычисляющую триплетную потерю для входных тензоров , , и отступа со значением больше . Она используется для измерения относительного сходства между образцами. Триплет состоит из
a,pиn(то есть, соответственно,anchor,positive examplesиnegative examples). Формы всех входных тензоров должны быть .Замена расстояния подробно описана в статье Обучение неглубоких дескрипторов сверточных признаков с помощью триплетных функций потерь В. Балнтаса, Э. Рибы и др.
Функция потерь для каждого образца в мини-пакете имеет вид:
где
Норма вычисляется с использованием указанного значения p; для численной устойчивости добавляется небольшая константа .
См. также
TripletMarginWithDistanceLoss, который вычисляет триплетную потерю с отступом для входных тензоров с использованием пользовательской функции расстояния.- Параметры:
-
- margin (float, необязательно) – По умолчанию: .
- p (int, необязательно) – Степень нормы для попарного расстояния. По умолчанию: .
- eps (float, необязательно) – Небольшая константа для численной устойчивости. По умолчанию: .
-
swap (bool, необязательно) – Замена расстояния подробно описана в статье
Learning shallow convolutional feature descriptors with triplet lossesВ. Балнтаса, Э. Рибы и др. По умолчанию:False. -
size_average (bool, необязательно) – Устарело (см.
reduction). По умолчанию потери усредняются по каждому элементу потерь в пакете. Обратите внимание, что для некоторых функций потерь на образец приходится несколько элементов. Если для поляsize_averageзадано значениеFalse, вместо этого потери суммируются для каждого мини-пакета. Игнорируется, еслиreduceравноFalse. По умолчанию:True -
reduce (bool, необязательно) – Устарело (см.
reduction). По умолчанию потери усредняются или суммируются по наблюдениям для каждого мини-пакета в зависимости отsize_average. ЕслиreduceравноFalse, вместо этого возвращается потеря для каждого элемента пакета, аsize_averageигнорируется. По умолчанию:True -
reduction (str, необязательно) – Задает способ редукции выходных данных:
'none'|'mean'|'sum'.'none': редукция не применяется,'mean': сумма выходных данных делится на количество элементов в них,'sum': выходные данные суммируются. Примечание:size_averageиreduceустаревают; пока что указание любого из этих аргументов переопределитreduction. По умолчанию:'mean'
- Форма:
-
- Входные данные: или , где — размерность вектора.
- Выходные данные: тензор формы , если
reductionравно'none'и форма входных данных — ; в противном случае — скаляр.
Примеры:
>>> triplet_loss = nn.TripletMarginLoss(margin=1.0, p=2, eps=1e-7) >>> anchor = torch.randn(100, 128, requires_grad=True) >>> positive = torch.randn(100, 128, requires_grad=True) >>> negative = torch.randn(100, 128, requires_grad=True) >>> output = triplet_loss(anchor, positive, negative) >>> output.backward()
-
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.TripletMarginLoss.html