自动编码器变给出相同的输出图像对每个输入图像MNIST使用KL散度当

问题描述 投票:1回答:3

当不使用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是含有方差的对数的矢量。

这是怎么回事错在这里?提前致谢 :)

deep-learning pytorch autoencoder bayesian-networks loss-function
3个回答
2
投票

一个可能的原因是在两个损失之间的数值不平衡,同而BCE一个求和您size_average=True损失计算为平均比批次(C.F. KLD)。


2
投票

是的,尝试与该KLD损失项不同的权重因子。称重下来KLD损失项可解决CelebA数据集(http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)相同的重建输出的问题。


-1
投票

乘法KLD 0.0001做到了。生成的图像是有点扭曲,但相似的问题解决了。

© www.soinside.com 2019 - 2024. All rights reserved.