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

Функция F.kl_div

Функция F.kl_div вычисляет дивергенцию Кульбака-Лейблера между двумя распределениями вероятностей. Первым параметром функция принимает тензор с логарифмами вероятностей первого распределения, вторым параметром - тензор с вероятностями второго распределения. Третьим параметром можно указать способ редукции результата.

Синтаксис

torch.nn.functional.kl_div(input, target, reduction='mean')

Пример

Давайте вычислим дивергенцию Кульбака-Лейблера между двумя распределениями с редукцией по умолчанию:

import torch import torch.nn.functional as F # Логарифмы вероятностей первого распределения log_p = torch.tensor([-1.0, -2.0, -3.0]) # Вероятности второго распределения q = torch.tensor([0.5, 0.3, 0.2]) res = F.kl_div(log_p, q) print(res)

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

tensor(0.7155)

Пример

Давайте используем редукцию суммы для получения общего значения дивергенции:

import torch import torch.nn.functional as F torch.manual_seed(0) log_p = torch.tensor([-0.5, -0.8, -1.2]) q = torch.tensor([0.6, 0.2, 0.2]) res = F.kl_div(log_p, q, reduction='sum') print(res)

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

tensor(0.7116)

Пример

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

import torch import torch.nn.functional as F log_p = torch.tensor([[-1.5, -2.5], [-0.5, -1.0]]) q = torch.tensor([[0.7, 0.3], [0.4, 0.6]]) res = F.kl_div(log_p, q, reduction='none') print(res)

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

tensor([ [-0.3920, -1.2040], [-0.1833, -0.3065], ])

Пример

Покажем правильный способ использования функции с логарифмическими вероятностями через F.log_softmax:

import torch import torch.nn.functional as F torch.manual_seed(0) # Исходные логиты logits = torch.tensor([2.0, 1.0, 0.5]) # Целевое распределение target = torch.tensor([0.4, 0.3, 0.3]) # Преобразование логитов в логарифмы вероятностей log_p = F.log_softmax(logits, dim=0) res = F.kl_div(log_p, target) print(res)

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

tensor(0.0537)

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

  • функцию log_softmax,
    которая преобразует логиты в логарифмы вероятностей
  • функцию softmax,
    которая преобразует логиты в распределение вероятностей
  • функцию cross_entropy,
    которая вычисляет перекрёстную энтропию между распределениями
  • функцию nll_loss,
    которая вычисляет отрицательную логарифмическую вероятность
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить