Spec-Zone.ru › PyTorch 2.14

SmoothL1Loss

class torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0) [исходный код]

Создаёт критерий, использующий квадратичный член, если абсолютная поэлементная ошибка меньше beta, и член 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 (обратите внимание, что гиперпараметр beta функции Smooth L1 также известен как delta для функции Хьюбера). Это приводит к следующим различиям:

  • При beta -> 0 функция потерь Smooth L1 сходится к L1Loss, тогда как HuberLoss сходится к постоянной функции потерь 0. При beta, равном 0, функция потерь Smooth L1 эквивалентна функции потерь L1.
  • При beta -> +∞+\infty функция потерь Smooth L1 сходится к постоянной функции потерь 0, тогда как HuberLoss сходится к MSELoss.
  • Для функции потерь Smooth L1 наклон участка L1 остаётся равным 1 при изменении beta. Для 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', то (∗)(*), той же формы, что и входные данные.

Примеры

>>> loss = nn.SmoothL1Loss()
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.randn(3, 5)
>>> output = loss(input, target)
>>> output.backward()
forward(input, target) [исходный код]

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

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

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.SmoothL1Loss.html

Spec-Zone.ru

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