有没有办法监控自定义 Keras 后端损失函数的不同子张量?

Is there a way to monitor the different subtensors of a custom Keras backend loss function?

我目前正在通过将其建模为 Keras 后端张量来实现自定义损失函数。损失函数有不同的部分(例如分类损失,量化损失或成对距离损失)

代码看起来像这样:

...
different_class_loss = K.log(1 + K.exp(-1*dissimilarity + margin))
pair_loss = same_class * same_class_loss   +   (1-same_class) * different_class_loss

loss_value = lambda_pair * pair_loss + lambda_classif * classif_loss + lambda_quant_binary * quantization_loss

# Add loss to model
pairwise_model.add_loss(loss_value)

# Compile without specifying a loss
pairwise_model.compile(optimizer=optimizer_adam)

当我使用 batch_generator 和 pairwise_model.fit() 训练模型时,历史记录恰好包含组合 loss_value 的一个损失参数。出于调试目的,我想单独监控损失函数的每个部分(即量化、分类和成对距离损失),但我不知道如何做。

我尝试使用 K.eval() 或 K.print_tensor() 实现回调以在训练期间检索值,但这没有用。我也无法使用 add_loss 函数添加多个损失指标。

有没有一种方法可以在不编写自定义训练循环的情况下做到这一点?感觉应该有。非常感谢任何帮助。

__________________________________________________

编辑:

根据史努比博士的想法,这是最终为我工作的代码:

...
different_class_loss = K.log(1 + K.exp(-1*dissimilarity + margin))
pair_loss = same_class * same_class_loss   +   (1-same_class) * different_class_loss

loss_value = lambda_pair * pair_loss + lambda_classif * classif_loss + lambda_quant_binary * quantization_loss

# Add loss to model
pairwise_model.add_loss(loss_value)

# Add additional losses as metrics
pairwise_model.add_metric(pair_loss, name = "pairwise loss")
pairwise_model.add_metric(quantization_loss, name = "quantization loss")

# Compile without specifying a loss or metrics
pairwise_model.compile(optimizer=optimizer_adam)

您可以将它们作为指标传递,如下所示:

def pl():
    return pair_loss

pairwise_model.compile(optimizer=optimizer_adam, metrics=[pl])

您可以对其他损失组件执行类似的操作。该函数可能不需要,您也可以尝试将 pair_loss 作为指标直接传递。