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

Функция F.huber_loss

Функция F.huber_loss вычисляет потерю Хьюбера для задачи регрессии. Она сочетает в себе свойства F.mse_loss и F.l1_loss: для малых ошибок она ведет себя как квадратичная функция (L2), а для больших ошибок - как линейная (L1). Первым параметром функция принимает тензор предсказанных значений, вторым - тензор целевых значений. Третьим параметром можно задать порог delta, который определяет границу перехода между L1 и L2. Четвертым параметром указывается способ редукции: 'none', 'mean' или 'sum'.

Синтаксис

torch.nn.functional.huber_loss(input, target, delta=1.0, reduction='mean')

Пример

Давайте вычислим потерю Хьюбера для простых предсказаний и целей с порогом delta=1.0:

import torch import torch.nn.functional as F pred = torch.tensor([2.5, 0.0, 2.1, 1.0]) target = torch.tensor([3.0, -0.5, 2.0, 1.0]) loss = F.huber_loss(pred, target, delta=1.0) print(loss)

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

tensor(0.2250)

Пример

Давайте используем редукцию 'none', чтобы получить поэлементные потери:

import torch import torch.nn.functional as F pred = torch.tensor([2.0, 1.5, 0.0]) target = torch.tensor([1.0, 1.0, 0.5]) loss = F.huber_loss(pred, target, delta=0.5, reduction='none') print(loss)

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

tensor([0.2500, 0.1250, 0.1250])

Пример

Давайте вычислим потерю Хьюбера с суммированием по всем элементам:

import torch import torch.nn.functional as F pred = torch.tensor([3.0, 0.5, 2.5]) target = torch.tensor([1.0, 1.0, 1.0]) loss = F.huber_loss(pred, target, delta=1.5, reduction='sum') print(loss)

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

tensor(3.3750)

Пример

Давайте используем F.huber_loss в процессе обучения модели на примере линейной регрессии:

import torch import torch.nn as nn import torch.nn.functional as F torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) x = torch.tensor([[1.0], [2.0], [3.0], [4.0]]) y = torch.tensor([[2.0], [4.0], [6.0], [8.0]]) for epoch in range(10): optimizer.zero_grad() pred = model(x) loss = F.huber_loss(pred, y, delta=0.5) loss.backward() optimizer.step() print(model.weight.data)

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

tensor([[1.9512]])

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

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