SmoothL1Loss
-
class torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0)[исходный код] -
Создаёт критерий, использующий квадратичный член, если абсолютная поэлементная ошибка меньше beta, и член L1 в противном случае. Он менее чувствителен к выбросам, чем
torch.nn.MSELoss, и в некоторых случаях предотвращает взрывной рост градиентов (см., например, статью Fast R-CNN Росса Гиршика).Для пакета размера невосстановленную функцию потерь можно описать так:
где
Если
reductionне равноnone, то:Примечание
Функцию потерь Smooth L1 можно рассматривать как в точности
L1Loss, но с заменой участка квадратичной функцией, наклон которой равен 1 при . Квадратичный участок сглаживает функцию потерь L1 вблизи .Примечание
Функция потерь Smooth L1 тесно связана с
HuberLossи эквивалентна (обратите внимание, что гиперпараметр beta функции Smooth L1 также известен как delta для функции Хьюбера). Это приводит к следующим различиям:- При beta -> 0 функция потерь Smooth L1 сходится к
L1Loss, тогда какHuberLossсходится к постоянной функции потерь 0. При beta, равном 0, функция потерь Smooth L1 эквивалентна функции потерь L1. - При beta -> функция потерь 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
-
size_average (bool, необязательный) – Устарел (см.
- Форма:
-
- Входные данные: , где обозначает любое количество измерений.
- Целевые данные: , той же формы, что и входные данные.
- Выходные данные: скаляр. Если
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)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
- При beta -> 0 функция потерь Smooth L1 сходится к
© 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