首页 > 解决方案 > 输出 Keras 中 add_loss 添加的多个损失

问题描述

我研究了变分自动编码器 (VAE) 演示的自定义损失层的 Keras 示例。在示例中它们只有一个损失层,而 VAE 的目标由两个不同的部分组成:重建和 KL-Divergence。但是,我想绘制/可视化这两个部分在训练期间如何演变,并将单个自定义损失分成两个损失层:

Keras 示例模型:

在此处输入图像描述

我的模型:

在此处输入图像描述

不幸的是,Keras 在我的多损失示例中只输出一个损失值,这可以在我的 Jupyter Notebook 示例中看到,我已经实现了这两种方法。有人知道如何获得由 增加的每个损失的值add_loss吗?此外,Keras 如何计算单个损失值,给定多次add_loss调用(均值/总和/...?)?

标签: pythontensorflowkerasdeep-learningmultipleoutputs

解决方案


我正在使用 Keras 的 2.2.4-tf 版本,上面的解决方案对我不起作用。这是我找到的解决方案(继续dumkar示例):

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.add_metric(kl_loss, name='kl_loss', aggregation='mean')
model.add_metric(reconstruction_loss, name='mse_loss', aggregation='mean')

model.compile(optimizer='adam')

希望它会帮助你。


推荐阅读