Spec-Zone.ru › PyTorch 2.14

MultiMarginLoss

class torch.nn.modules.loss.MultiMarginLoss(p=1, margin=1.0, weight=None, size_average=None, reduce=None, reduction='mean') [source]

Создаёт функцию потерь, оптимизирующую функцию потерь типа hinge для многоклассовой классификации (функцию потерь на основе отступа) между входом xx (двумерным мини-пакетом Tensor) и выходом yy (одномерным тензором с индексами целевых классов, 0≤y≤x.size(1)−10 \leq y \leq \text{x.size}(1)-1):

Для каждого образца мини-пакета функция потерь для одномерного входа xx и скалярного выхода yy определяется следующим образом:

loss(x,y)=∑imax⁡(0,margin−x[y]+x[i])px.size(0)\text{loss}(x, y) = \frac{\sum_i \max(0, \text{margin} - x[y] + x[i])^p}{\text{x.size}(0)}

где i∈{0,⋯,x.size(0)−1}i \in \left\{0, \; \cdots , \; \text{x.size}(0) - 1\right\} и i≠yi \neq y.

При необходимости можно задать разные веса классов, передав в конструктор одномерный тензор weight.

Тогда функция потерь принимает следующий вид:

loss(x,y)=∑iw[y]∗max⁡(0,margin−x[y]+x[i])px.size(0)\text{loss}(x, y) = \frac{\sum_i w[y] * \max(0, \text{margin} - x[y] + x[i])^p}{\text{x.size}(0)}
Параметры:
  • p (int, необязательно) – Значение по умолчанию — 11. Поддерживаются только значения 11 и 22.
  • margin (float, необязательно) – Значение по умолчанию — 11.
  • weight (Tensor, необязательно) – вес, вручную задаваемый для масштабирования каждого класса. Если он указан, это должен быть тензор размера C. В противном случае считается, что все его значения равны единице.
  • 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'
Форма:
  • Вход: (N,C)(N, C) или (C)(C), где NN — размер пакета, а CC — количество классов.
  • Целевые значения: (N)(N) или ()(), где каждое значение удовлетворяет условию 0≤targets[i]≤C−10 \leq \text{targets}[i] \leq C-1.
  • Выход: скаляр. Если reduction равно 'none', форма совпадает с формой целевых значений.

Примеры

>>> loss = nn.MultiMarginLoss()
>>> x = torch.tensor([[0.1, 0.2, 0.4, 0.8]])
>>> y = torch.tensor([3])
>>> # 0.25 * ((1-(0.8-0.1)) + (1-(0.8-0.2)) + (1-(0.8-0.4)))
>>> loss(x, y)
tensor(0.32...)
forward(input, target) [source]

Выполняет прямой проход.

Тип возвращаемого значения:

Tensor

© 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.MultiMarginLoss.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API