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

Cra*_*cin 4 bayesian-networks autoencoder deep-learning pytorch loss-function

当不使用 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)
Run Code Online (Sandbox Code Playgroud)

recon_x 是重建图像,x 是 original_image,mu 是均值向量,而 logvar 是包含方差对数的向量。

这里出了什么问题?提前致谢 :)

ben*_*che 6

一个可能的原因是两个损失之间的数值不平衡,您的BCE损失计算为批次的平均值 (cf size_average=True),而KLD一个是相加的。