РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
435 of 769 menu

Функция smooth_l1_loss

Функция smooth_l1_loss (также известная как функция потери Хьюбера в некоторых реализациях) вычисляет потерю между каждым элементом входного тензора input и целевым тензором target. Она представляет собой комбинацию L1 и L2 потерь: при больших ошибках ведет себя как L1 (линейная), что делает её устойчивой к выбросам, а при малых ошибках - как L2 (квадратичная), что обеспечивает гладкий градиент. Первым параметром функция принимает тензор предсказаний, вторым - тензор целевых значений. Третьим параметром можно указать размер партии для усреднения. Четвертый параметр beta задает порог, определяющий переход между L1 и L2 поведением.

Математически функция определяется следующим образом: если абсолютная разница между предсказанием и целью меньше beta, то используется квадратичная функция (L2), иначе - линейная (L1), сглаженная в точке перехода.

Синтаксис

torch.nn.functional.smooth_l1_loss( input, target, size_average=None, reduce=None, reduction='mean', beta=1.0 )

Параметры

  • input - тензор предсказанных значений.
  • target - тензор целевых значений.
  • size_average - устаревший параметр, вместо него используйте reduction.
  • reduce - устаревший параметр, вместо него используйте reduction.
  • reduction - строка, определяющая режим усреднения: 'mean' (усреднение по элементам), 'sum' (суммирование) или 'none' (без усреднения). Значение по умолчанию: 'mean'.
  • beta - положительное число, задающее порог перехода между L1 и L2 поведением. Значение по умолчанию: 1.0.

Пример с разными параметрами beta

Рассмотрим работу функции для двух пар предсказаний и целей с разными значениями beta:

import torch import torch.nn.functional as F torch.manual_seed(0) input = torch.tensor([0.5, 2.5, -1.0]) target = torch.tensor([0.0, 3.0, -2.0]) res1 = F.smooth_l1_loss(input, target, beta=0.5) res2 = F.smooth_l1_loss(input, target, beta=1.0) res3 = F.smooth_l1_loss(input, target, beta=2.0) print(res1) print(res2) print(res3)

Результат выполнения кода:

tensor(0.1667) tensor(0.2083) tensor(0.2917)

Пример с режимом суммирования

Используем параметр reduction='sum' для получения суммы потерь вместо среднего значения:

import torch import torch.nn.functional as F torch.manual_seed(0) input = torch.tensor([0.2, 1.2, -0.5]) target = torch.tensor([0.0, 1.0, 0.0]) res = F.smooth_l1_loss(input, target, reduction='sum', beta=1.0) print(res)

Результат выполнения кода:

tensor(0.0850)

Пример без усреднения

Используем reduction='none' для получения тензора поэлементных потерь:

import torch import torch.nn.functional as F torch.manual_seed(0) input = torch.tensor([1.5, 0.2, -0.8]) target = torch.tensor([1.0, 0.0, 0.0]) res = F.smooth_l1_loss(input, target, reduction='none', beta=0.5) print(res)

Результат выполнения кода:

tensor([0.1250, 0.0200, 0.2950])

Использование в качестве функции потерь в обучении

Функция smooth_l1_loss часто используется в задачах регрессии, особенно в детекции объектов. Приведем пример вычисления потерь для двух батчей предсказаний:

import torch import torch.nn.functional as F torch.manual_seed(0) pred = torch.randn(4, 3) target = torch.randn(4, 3) loss = F.smooth_l1_loss(pred, target, beta=1.0) print(loss)

Результат выполнения кода:

tensor(0.7565)

Смотрите также

  • функцию l1_loss,
    которая вычисляет среднюю абсолютную ошибку
  • функцию mse_loss,
    которая вычисляет среднеквадратичную ошибку
  • функцию huber_loss,
    которая является обобщением smooth L1 для задач регрессии
  • функцию cross_entropy,
    которая вычисляет кросс-энтропийную потерю для классификации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить