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

Класс GaussianNLLLoss

Класс GaussianNLLLoss вычисляет отрицательное логарифмическое правдоподобие для данных, предполагая, что целевые значения имеют гауссовское распределение с заданными средними значениями и дисперсией. Этот класс используется для обучения моделей, которые предсказывают не только целевые значения, но и неопределенность предсказаний.

На вход класс принимает предсказанные средние значения и дисперсии, а также истинные целевые значения. Потери вычисляются по формуле, учитывающей как ошибку предсказания среднего, так и неопределенность.

Синтаксис

torch.nn.GaussianNLLLoss(full=False, eps=1e-06, reduction='mean')

Параметры класса:

  • full - флаг, определяющий учет константных членов в формуле потерь. По умолчанию False.
  • eps - небольшое значение, добавляемое к дисперсии для численной стабильности. По умолчанию 1e-06.
  • reduction - способ агрегации потерь: 'none', 'mean' или 'sum'. По умолчанию 'mean'.

Метод forward

loss(input, target, var, ...)

Параметры метода:

  • input - предсказанные средние значения.
  • target - истинные целевые значения.
  • var - предсказанная дисперсия.

Пример работы

Создадим функцию потерь и применим ее к тензорам предсказаний и истинных значений:

import torch import torch.nn as nn torch.manual_seed(0) loss = nn.GaussianNLLLoss() input = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]) target = torch.tensor([1.5, 2.5, 3.5, 4.5, 5.5]) var = torch.tensor([0.5, 0.5, 0.5, 0.5, 0.5]) res = loss(input, target, var) print(res)

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

tensor(0.2459)

Пример с batch-обработкой

Используем тензоры с размерностью батча для моделирования реального обучения:

import torch import torch.nn as nn torch.manual_seed(0) loss = nn.GaussianNLLLoss() batch_size = 4 input = torch.randn(batch_size, 5) target = torch.randn(batch_size, 5) var = torch.abs(torch.randn(batch_size, 5)) + 0.5 res = loss(input, target, var) print(res)

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

tensor(1.5894)

Пример с различными значениями reduction

Рассмотрим, как влияет параметр reduction на результат функции потерь:

import torch import torch.nn as nn torch.manual_seed(0) input = torch.tensor([1.0, 2.0, 3.0, 4.0]) target = torch.tensor([1.2, 2.3, 3.1, 4.4]) var = torch.tensor([0.2, 0.3, 0.4, 0.5]) loss_none = nn.GaussianNLLLoss(reduction='none') loss_mean = nn.GaussianNLLLoss(reduction='mean') loss_sum = nn.GaussianNLLLoss(reduction='sum') res_none = loss_none(input, target, var) res_mean = loss_mean(input, target, var) res_sum = loss_sum(input, target, var) print(res_none) print(res_mean) print(res_sum)

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

tensor([-0.1222, -0.0237, 0.2383, 0.2351]) tensor(0.0819) tensor(0.3276)

Пример с параметром full

Используем параметр full=True для учета константных членов в формуле потерь:

import torch import torch.nn as nn torch.manual_seed(0) input = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]) target = torch.tensor([1.5, 2.5, 3.5, 4.5, 5.5]) var = torch.tensor([0.5, 0.5, 0.5, 0.5, 0.5]) loss = nn.GaussianNLLLoss(full=True) res = loss(input, target, var) print(res)

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

tensor(1.5544)

Пример с предсказанием дисперсии моделью

Создадим простую модель, которая предсказывает как среднее, так и дисперсию гауссовского распределения:

import torch import torch.nn as nn import torch.nn.functional as F torch.manual_seed(0) class GaussianModel(nn.Module): def __init__(self, input_size, hidden_size, output_size): super().__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.fc_mean = nn.Linear(hidden_size, output_size) self.fc_var = nn.Linear(hidden_size, output_size) def forward(self, x): x = F.relu(self.fc1(x)) mean = self.fc_mean(x) var = F.softplus(self.fc_var(x)) + 1e-6 return mean, var model = GaussianModel(10, 20, 5) loss = nn.GaussianNLLLoss() x = torch.randn(4, 10) target = torch.randn(4, 5) mean, var = model(x) res = loss(mean, target, var) print(res)

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

tensor(2.4937)

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

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