Класс SmoothL1Loss
Класс SmoothL1Loss вычисляет сглаженную L1-функцию потерь
между входным тензором и целевым тензором. Она менее чувствительна к выбросам,
чем MSELoss, и имеет более плавный градиент, чем L1Loss.
По умолчанию используется параметр beta = 1.0, который определяет
границу перехода между L1 и L2-составляющими. Данная функция потерь
особенно полезна при обучении детекторов объектов и регрессионных задач.
Синтаксис
torch.nn.SmoothL1Loss(beta=1.0, reduction='mean')
Параметры:
beta- параметр, определяющий границу перехода (по умолчанию 1.0);reduction- способ агрегации потерь: 'none', 'mean' (по умолчанию) или 'sum'.
Пример
Давайте создадим экземпляр класса и вычислим потери между двумя простыми тензорами:
import torch
import torch.nn as nn
criterion = nn.SmoothL1Loss()
pred = torch.tensor([1.5, 2.5, 3.5])
target = torch.tensor([1.0, 2.0, 3.0])
loss = criterion(pred, target)
print(loss)
Результат выполнения кода:
tensor(0.125)
Пример
Теперь изменим параметр beta для управления чувствительностью к выбросам:
import torch
import torch.nn as nn
criterion = nn.SmoothL1Loss(beta=0.5)
pred = torch.tensor([2.0, 3.0, 10.0])
target = torch.tensor([1.0, 2.0, 1.0])
loss = criterion(pred, target)
print(loss)
Результат выполнения кода:
tensor(6.2917)
Пример
Используем режим агрегации 'sum' для получения суммы потерь без усреднения:
import torch
import torch.nn as nn
criterion = nn.SmoothL1Loss(reduction='sum')
pred = torch.tensor([[0.5, 1.5], [2.5, 3.5]])
target = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
loss = criterion(pred, target)
print(loss)
Результат выполнения кода:
tensor(0.5000)
Пример
Применим функцию потерь к батчу данных с размерностью (batch, features):
import torch
import torch.nn as nn
torch.manual_seed(0)
criterion = nn.SmoothL1Loss(beta=0.1)
pred = torch.randn(4, 3)
target = torch.randn(4, 3)
loss = criterion(pred, target)
print(loss)
Результат выполнения кода:
tensor(0.3406)
Смотрите также
-
класс
MSELoss,
который вычисляет среднеквадратичную ошибку -
класс
L1Loss,
который вычисляет L1-функцию потерь -
класс
HuberLoss,
которая является обобщением SmoothL1Loss с гибким параметром delta -
класс
CrossEntropyLoss,
которая применяется для задач классификации