输出keras中add_loss添加的多个loss
·
问题:输出keras中add_loss添加的多个loss
我研究了变分自动编码器 (VAE)](https://github.com/keras-team/keras/blob/e8484633473c340defbe03a092be2d4856d56302/examples/variational_autoencoder.py)演示的[自定义损失层的 Keras 示例。在示例中它们只有一个损失层,而 VAE 的目标由两个不同的部分组成:重建和 KL-Divergence。但是,我想绘制/可视化这两个部分在训练期间如何演变,并将单个自定义损失分成两个损失层:
Keras 示例模型:

我的模特:

不幸的是,对于我的多损失示例,Keras 仅输出一个损失值,如我的 Jupyter Notebook 示例中所示,我已经实现了这两种方法。有人知道如何获得add_loss添加的每个损失的值吗?此外,在给定多个add_loss调用(均值/总和/...?)的情况下,Keras 如何计算单个损失值?
解答
这确实不受支持,目前在网络上的不同地方进行了讨论。可以通过在编译步骤之后再次将损失作为单独的指标添加来获得解决方案(这里也讨论了)
这会导致类似这样的结果(特别是对于 VAE):
reconstruction_loss = mse(K.flatten(inputs), K.flatten(outputs))
kl_loss = beta*K.mean(- 0.5 * 1/latent_dim * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1))
model.add_loss(reconstruction_loss)
model.add_loss(kl_loss)
model.compile(optimizer='adam')
model.metrics_tensors.append(kl_loss)
model.metrics_names.append("kl_loss")
model.metrics_tensors.append(reconstruction_loss)
model.metrics_names.append("mse_loss")
对我来说,这给出了这样的输出:
Epoch 1/1
252/252 [==============================] - 23s 92ms/step - loss: 0.4336 - kl_loss: 0.0823 - mse_loss: 0.3513 - val_loss: 0.2624 - val_kl_loss: 0.0436 - val_mse_loss: 0.2188
更多推荐

所有评论(0)