SmoothL1Loss
-
class torch.nn.modules.loss.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стремится к постоянной нулевой функции потерь. При beta, равном 0, функция потерь Smooth L1 эквивалентна функции потерь L1. - При beta -> функция потерь Smooth L1 стремится к постоянной нулевой функции потерь, тогда как
HuberLossстремится кMSELoss. - Для функции потерь Smooth L1 при изменении 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
-
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.modules.loss.SmoothL1Loss.html