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

Класс KLDivLoss

Класс KLDivLoss вычисляет расхождение Кульбака-Лейблера между входным тензором и целевым распределением. Входной тензор должен содержать логарифмы вероятностей, а целевой тензор - вероятности. Первым параметром конструктора можно указать параметр reduction, который определяет способ агрегации потерь: 'none', 'batchmean', 'sum' или 'mean'. По умолчанию используется 'mean'. Также можно передать параметр log_target для указания, что целевой тензор также содержит логарифмы.

Синтаксис

torch.nn.KLDivLoss( reduction='mean', log_target=False )

Параметры:

  • reduction - способ агрегации: 'none', 'batchmean', 'sum', 'mean';
  • log_target - логическое значение, указывает, что целевой тензор содержит логарифмы.

Пример

Создадим функцию потерь и вычислим KL-дивергенцию между двумя распределениями:

import torch criterion = torch.nn.KLDivLoss() input_t = torch.log(torch.tensor([0.4, 0.6])) target_t = torch.tensor([0.5, 0.5]) res = criterion(input_t, target_t) print(res)

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

tensor(0.0501)

Пример

Вычислим потерю с агрегацией 'batchmean', которая делит сумму на размер пакета:

import torch criterion = torch.nn.KLDivLoss(reduction='batchmean') input_t = torch.log(torch.tensor([[0.3, 0.7], [0.4, 0.6]])) target_t = torch.tensor([[0.5, 0.5], [0.5, 0.5]]) res = criterion(input_t, target_t) print(res)

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

tensor(0.0742)

Пример

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

import torch criterion = torch.nn.KLDivLoss(reduction='none') input_t = torch.log(torch.tensor([0.4, 0.6])) target_t = torch.tensor([0.5, 0.5]) res = criterion(input_t, target_t) print(res)

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

tensor([0.1116, 0.0513])

Пример

Используем параметр log_target=True, когда целевой тензор также содержит логарифмы:

import torch criterion = torch.nn.KLDivLoss(log_target=True) input_t = torch.log(torch.tensor([0.4, 0.6])) target_t = torch.log(torch.tensor([0.5, 0.5])) res = criterion(input_t, target_t) print(res)

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

tensor(0.0501)

Пример

Вычислим KL-дивергенцию с агрегацией 'sum':

import torch criterion = torch.nn.KLDivLoss(reduction='sum') input_t = torch.log(torch.tensor([0.4, 0.6])) target_t = torch.tensor([0.5, 0.5]) res = criterion(input_t, target_t) print(res)

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

tensor(0.1003)

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

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