Перекрестная публикация мой вопрос с форума PyTorch :
Я начал получать отрицательные расхождения KL между целевым распределением Дирихле и выходным распределением Дирихле моей модели. Кто-то в сети предположил, что это может свидетельствовать о том, что параметры распределения Дирихле не равны 1. Я подумал, что это нелепо, поскольку выходные данные модели передаются через
output = F.softmax(self.weights(x), dim=1)
Но после более тщательного изучения я обнаружил, что torch.all(torch.sum(output, dim=1) == 1.)
возвращает значение False! Глядя на проблемный ряд, я вижу, что это tensor([0.0085, 0.9052, 0.0863], grad_fn=<SelectBackward>)
. Но torch.sum(output[5]) == 1.
производит tensor(False)
.
Что я неправильно использую в softmax, так что выходные вероятности не составляют 1?
Это версия PyTorch 1.2.0 + процессор. Полная модель скопирована ниже:
import torch
import torch.nn as nn
import torch.nn.functional as F
def assert_no_nan_no_inf(x):
assert not torch.isnan(x).any()
assert not torch.isinf(x).any()
class Network(nn.Module):
def __init__(self):
super().__init__()
self.weights = nn.Linear(
in_features=2,
out_features=3)
def forward(self, x):
output = F.softmax(self.weights(x), dim=1)
assert torch.all(torch.sum(output, dim=1) == 1.)
assert_no_nan_no_inf(x)
return output