首页 > 解决方案 > 为什么重建损失函数乘以VAE中的常数?

问题描述

我试图了解如何使用自动编码器损失函数的最佳方式。

所以最常见的一点是,常见的损失函数由 KL 损失和重建损失组成。

真正让我困惑的是重建损失乘以一些大常数,例如

xent_loss = self.original_dim * metrics.binary_crossentropy(self.x, x_decoded_mean)
kl_loss = - 0.5 * K.sum(1 + self.z_log_var - K.square(self.z_mean) - K.exp(self.z_log_var), axis=-1)
vae_loss = K.mean(xent_loss + kl_loss)

来自https://github.com/mattiacampana/Autoencoders/blob/master/models/vae.py

或来自https://towardsdatascience.com/variational-autoencoders-as-generation-models-with-keras-e0c79415a7eb

在此处输入图像描述

你能解释一下吗?另外我不明白的是,他们以某种方式使用 reduce_mean 并以某种方式使用 reduce_sum 聚合函数。这些术语有什么区别吗?例如,在 KL 中使用 reduce_sum 并在重建函数中使用 reduce_mean 会很痛苦吗?

感谢您的任何回复

标签: pythontensorflowkerasloss-functionautoencoder

解决方案


推荐阅读