我在VAE部分中了解了TensorFlow 2.0 tutorial。我按照本教程进行操作,但是尽管直接从给定的Google Colab运行笔记本,但是该模型无法按预期运行。结果实际上与教程中的结果相同(即损耗值非常相似),但是如果您查看输出,则会发现该模型根本无法重建输入(即,所有输入都输出相同的图像) 。结合使用model.add_loss()
和keras.losses
时,这似乎是本教程的错误。
我将MSE损失更改为BinaryCrossentropy,但结果仍然相同。
稍后,我尝试在前向传递中显式计算BinaryCrossentropy损失,然后除了使用KL散度损失外,还使用model.add_loss()
Use only model.add_loss() to calculate the loss
通过这种方式,模型可以实际学习数据,并且输出看起来足够好。
所以我有一个关于model.add_loss()
和损失的问题,该函数采用(y_true, y_pred)
(即keras.losses
)。更新后的代码只有能够计算前向通过中的损失(例如,kl散度或重建损失),才能工作,在模型需要模型真实性的情况下,如何正确组合model.add_loss()
和keras.losses
输出(例如降噪VAE)。