对于像 VAE 这样具有竞争损失的网络,独立跟踪每个损失很有用。也就是说,查看总损失以及数据项和 KL 代码项很有用。
这在 Keras 中是可能的吗?可以使用 vae.losses 恢复损失,但它们是 tensorflow 层,因此不能在 keras 中使用(例如,无法创建计算 vae 损失作为输出的第二个模型)。
似乎这样做的一种方法是在编译时将它们添加到指标列表中,但它们不适合指标模型。
这是一些示例代码,抱歉篇幅过长,它稍微改编自 Keras 的示例代码。主要区别在于我已经明确地将 KL div 的计算移到了采样层,这比原始示例代码感觉更自然。
'''This script demonstrates how to build a variational autoencoder with Keras.
Reference: "Auto-Encoding Variational Bayes" https://arxiv.org/abs/1312.6114
'''
from keras.layers import Input, Dense, Lambda, Layer
from keras.models import Model
from keras import backend as K
from keras import metrics
batch_size = 100
original_dim = 784
latent_dim = 2
intermediate_dim = 256
epochs = 50
epsilon_std = 1.0
x …Run Code Online (Sandbox Code Playgroud) keras ×1