вычислите расхождение KL между равномерным распределением и распределением вероятностей

#python #torch

#питон #факел

Вопрос:

Я пытаюсь рассчитать потери сети, и ее потеря-это расхождение KL между равномерным распределением и распределением вероятностей, предсказанным сетью. И я получил распределение вероятностей, используя:

probs_data = pre_network(data)

# probs_data.size() is [16,2]

Однако я не знаю, как построить равномерное распределение для вычисления KL.

В этом случае я вывожу формулу KL, похоже, я могу сгладить probs_data, используя

probs_flatten = torch. flatten(probs_data,0) ,

а затем вычислите и суммируйте логарифмическое значение для каждого элемента в этом тензоре probs_flatten .

probs_result = -torch.sum(torch.log(probs_flatten))/2

Однако я не знаю, правда ли это.

Вопрос: Каков правильный код для расчета убытка?

Комментарии:

1. Является ли probs_data и/или probs_flatten дистрибутивом? (Все ли значения в [0, 1] и равны ли они в сумме 1,0?) Если это так, эталонное равномерное распределение равно 1/N * единиц( your_shape), где N-размер вектора вероятностей, и your_shape соответствует вектору вероятностей