Spec-Zone.ru › PyTorch 1

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}

Примечание

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

Примечание

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

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

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

Spec-Zone.ru

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