Keras 如何处理KERA中的单输出多重损失?

Keras 如何处理KERA中的单输出多重损失?,keras,Keras,我的模型只有一个输出。但是我想把损失分成3个不同的部分,这样我就可以跟踪每个部分的进度。有没有办法让keras做到这一点 也许我可以将相同的损失组件定义为指标,但有没有更优雅的方法?您可以将损失定义为Keras层,然后您可以手动添加所有损失和指标(如果需要) TL;博士: 定义计算损耗的图层 编写自己的compile()函数,在其中添加优化器、损失和度量 在model.compile(optimizer=“adam”,loss=…)中,将None添加为loss 这就是代码中手动添加损失的方

我的模型只有一个输出。但是我想把损失分成3个不同的部分,这样我就可以跟踪每个部分的进度。有没有办法让keras做到这一点


也许我可以将相同的损失组件定义为指标,但有没有更优雅的方法?

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

TL;博士:

  • 定义计算损耗的图层
  • 编写自己的compile()函数,在其中添加优化器、损失和度量
  • 在model.compile(optimizer=“adam”,loss=…)中,将
    None
    添加为loss
这就是代码中手动添加损失的方式:

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))

如果
模型
是Keras模型

我也面临同样的问题。。你找到解决方案了吗?这里有一个简单的解决方案: