Spec-Zone.ru › PyTorch 2

MultiMarginLoss

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

Создаёт критерий, который оптимизирует многоклассовую классификационную функцию потерь Хинге (основанную на отступе) между входом 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...)

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.MultiMarginLoss.html

Spec-Zone.ru

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