如何处理keras的单输出多重损失?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理keras的单输出多重损失?相关的知识,希望对你有一定的参考价值。

我的模型有一个输出。但我想将损失分成3个不同的组件,以便我可以跟踪每个组件的进度。有没有办法用keras做到这一点?

也许我可以定义与指标相同的损失组件,但是有更优雅的方式吗?

答案

您可以将损失定义为Keras图层,然后您可以手动添加所有损失和指标(如果需要)。

You can see a complete tutorial about this topic here

TL; DR:

  • 定义计算损失的图层
  • 编写自己的compile()函数,添加优化器,损失和指标
  • 在model.compile(optimizer =“adam”,loss = ...)中添加None作为损失

这是在代码中手动添加损失的方式:

loss_layer_names = {"my_loss", ...}

# Adding losses
for name in loss_layer_names:
    layer = model.get_layer(name)
    loss = (tf.reduce_mean(layer.output, keepdims=True))
    model.add_loss(loss)

# Adding metrics
for name in loss_layer_names:
    layer = model.get_layer(name)
    loss = (tf.reduce_mean(layer.output, keepdims=True))
    model.metrics_names.append(name)
    model.metrics_tensors.append(loss)

model.compile(optimizer="adam", loss=[None] * len(model.outputs))

model是Keras模型

以上是关于如何处理keras的单输出多重损失?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理keras中多变量LSTM的多步时间序列预测

如何处理 ExpandableListView 中的单选按钮?

片段如何处理触摸?

在片段之间切换时如何处理相机?

如何处理 Pytorch 中的小批量损失?

Keras 如何处理多标签分类?