Spec-Zone.ru › PyTorch 2

SmoothL1Loss

class torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0) [source]

Создаёт критерий, который использует квадратичный член, если абсолютная элементная ошибка меньше бета, и член L1 в противном случае. Он менее чувствителен к выбросам, чем torch.nn.MSELoss, и в некоторых случаях предотвращает взрыв градиентов (например, см. статью Fast R-CNN Росса Гиршика).

Для пакета размером NN, неуменьшенная потеря может быть описана как:

ℓ(x,y)=L={l1,...,lN}T\ell(x, y) = L = \{l_1, ..., l_N\}^T

где

ln={0.5(xn−yn)2/beta,если ∣xn−yn∣<beta∣xn−yn∣−0.5∗beta,в противном случае l_n = \begin{cases} 0.5 (x_n - y_n)^2 / beta, & \text{if } |x_n - y_n| < beta \\ |x_n - y_n| - 0.5 * beta, & \text{otherwise } \end{cases}

Если reduction не none, то:

ℓ(x,y)={mean⁡(L),если reduction=‘mean’;sum⁡(L),если reduction=‘sum’.\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases}

Примечание

Потеря Smooth L1 — это точно L1Loss, но с частью ∣x−y∣<beta|x - y| < beta заменено квадратичной функцией, такой что её наклон равен 1 в ∣x−y∣=beta|x - y| = beta. Квадратичный сегмент сглаживает потерю L1 вблизи ∣x−y∣=0|x - y| = 0.

Примечание

Потеря Smooth L1 тесно связана с HuberLoss, являясь эквивалентной к huber(x,y)/betahuber(x, y) / beta (обратите внимание, что гиперпараметр бета Smooth L1 также известен как дельта для Huber). Это приводит к следующим различиям:

  • При beta -> 0, потеря Smooth L1 стремится к L1Loss, в то время как HuberLoss стремится к постоянной потере 0. При beta равной 0, потеря Smooth L1 эквивалентна потере L1.
  • При beta -> +∞+\infty, потеря Smooth L1 стремится к постоянной потере 0, в то время как HuberLoss стремится к MSELoss.
  • Для Smooth L1 loss, при изменении beta, сегмент L1 потери имеет постоянный наклон 1. Для HuberLoss, наклон сегмента L1 равен beta.
Параметры
  • 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'
  • beta (float, необязательно) – Указывает порог, при котором происходит изменение между L1 и L2 потерями. Значение должно быть неотрицательным. По умолчанию: 1.0
Форма:
  • Вход: (∗)(*), где ∗* означает любое количество измерений.
  • Цель: (∗)(*), такая же форма, как у входа.
  • Выход: скаляр. Если reduction равно 'none', то (∗)(*), такая же форма, как у входа.

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

Spec-Zone.ru

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