如何处理喀拉拉邦单输出多损失?

时间:2018-11-13 02:07:24

标签: keras

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

也许我可以定义与指标相同的损失成分,但是还有更优雅的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以将损失定义为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模型的地方