我正在关注这个变分自动编码器教程:https ://keras.io/examples/generation/vae/ 。
我知道VAE的损失函数包括比较原始图像和重建的重建损失,以及KL损失。但是,我对重建损失以及它是在整个图像(平方差之和)还是每个像素(平方差的平均和)上有点困惑。我的理解是重建损失应该是每像素(MSE),但我遵循的示例代码将 MSE 乘以28 x 28
MNIST 图像尺寸。那是对的吗?此外,我的假设是这会使重建损失项显着大于 KL 损失,我不确定我们是否想要这样。
我尝试通过 (28x28) 删除乘法,但这导致重建极差。无论输入如何,基本上所有的重建看起来都是一样的。我可以使用 lambda 参数来捕获 kl 散度和重建之间的权衡,或者它不正确,因为损失具有精确的推导(而不是仅仅添加正则化惩罚)。
reconstruction_loss = tf.reduce_mean(
keras.losses.binary_crossentropy(data, reconstruction)
)
reconstruction_loss *= 28 * 28
kl_loss = 1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)
kl_loss = tf.reduce_mean(kl_loss)
kl_loss *= -0.5
total_loss = reconstruction_loss + kl_loss