Variational Autoencoder дает одно и то же выходное изображение для каждого входного изображения Mnist при использовании расхождения KL - PullRequest
0 голосов
/ 30 мая 2018

Если термин «дивергенция KL» не используется, VAE почти идеально восстанавливает mnist-изображения, но не может правильно генерировать новые при наличии случайного шума.

При использовании термина «дивергенция KL» VAE выдает одинаковые странные выходные данные.при реконструкции и генерации изображений.

enter image description here

Вот код 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 - это вектор, содержащий лог дисперсии.

Что здесь не так?Заранее спасибо:)

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Возможная причина - числовой дисбаланс между двумя потерями, при этом ваша потеря BCE вычисляется как среднее значение по партии (ср size_average=True), а сумма KLD суммируется.

0 голосов
/ 10 февраля 2019

Да, попробуйте другой весовой коэффициент для срока потери KLD.Уменьшение срока потери KLD решает ту же проблему выходных данных реконструкции в наборе данных CelebA (http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html).

0 голосов
/ 30 мая 2018

Умножение KLD на 0,0001 сделало это.Сгенерированные изображения немного искажены, но проблема схожести решена.

...