当不使用 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 是原始图像,mu 是均值向量,而 logvar 是包含方差对数的向量。
这里出了什么问题?提前致谢 :)
一个可能的原因是两个损失之间的数值不平衡,您的BCE
损失计算为批次的平均值(参见size_average=True
)而KLD
一是总结。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)