Если термин «дивергенция KL» не используется, VAE почти идеально восстанавливает mnist-изображения, но не может правильно генерировать новые при наличии случайного шума.
При использовании термина «дивергенция KL» VAE выдает одинаковые странные выходные данные.при реконструкции и генерации изображений.
Вот код pytorch для функции потерь:
def loss_function(recon_x, x, mu, logvar):
BCE = F.binary_cross_entropy(recon_x, x.view(-1, 784), size_average=True)
KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
return (BCE+KLD)
recon_x - восстановленное изображение, x - это исходное изображение, mu - средний вектор, а logvar - это вектор, содержащий лог дисперсии.
Что здесь не так?Заранее спасибо:)