当使用KL散度时,变分自动编码器为每个输入mnist图像提供相同的输出图像

时间:2018-05-30 14:42:22

标签: deep-learning pytorch autoencoder bayesian-networks loss-function

当不使用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是original_image,mu是平均向量,而logvar是包含方差对数的向量。

这里出了什么问题?在此先感谢:)

3 个答案:

答案 0 :(得分:1)

可能的原因是两次损失之间的数字不平衡,您的BCE损失计算为批次的平均值(cf size_average=True),而KLD的总和。{ / p>

答案 1 :(得分:1)

是的,在KLD损失项中尝试使用不同的权重因子。权衡KLD损失项可以解决CelebA数据集(http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)中相同的重构输出问题。

答案 2 :(得分:-2)

将KLD与0.0001相乘得到了它。生成的图像有点失真,但相似性问题已得到解决。