当不使用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是original_image,mu是平均向量,而logvar是包含方差对数的向量。
这里出了什么问题?在此先感谢:)
答案 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相乘得到了它。生成的图像有点失真,但相似性问题已得到解决。