【问题标题】:Keras: Rename Metrics for Same Tensorboard Graph ViewingKeras:重命名相同 Tensorboard 图形查看的指标
【发布时间】:2025-12-12 07:10:02
【问题描述】:

用例: 我有多个模型,每个模型的架构略有不同。具有一个输出的模型 A 和具有两个输出的模型 B(称为 output_1output_2)。模型 B 的 output_1 对应于与模型 A 的单个输出相同的信息。我想将模型 B 的 output_1 的准确度/损失与模型 A 的准确度/损失一起绘制在 Tensorboard 的同一图表上。我正在使用模型 A/B 的功能层协议,因此给出模型 B 名称的两个输出:output_1output_2,同时给出模型 A 的输出:output_1

我注意到 Keras/Tensorboard 会将模型 B 的准确度/损失报告为 output_1_acc, output_2_acc, output_1_loss, output_2_loss, val_output_1_acc, val_output_2_acc, val_output_1_loss, val_output_2_loss(可能添加了一个 loss 度量名称,对应于从输出 1/2 中添加的损失)。但是,我注意到 Keras/Tensorboard 将报告模型 A 下的准确度/损失(如果使用公制编译:accuracy)为acc, loss, val_acc, val_loss。因此,模型 A/B 的 output_1 的准确度并未绘制在 Tensorboard 的同一图表上。让我不得不为每个下载 csv,然后手动将它们绘制在一起。

因此,我正在寻找一种简洁的方法来简单地重命名模型 A (output_1) 中单个输出的指标(准确度/损失),以便 Tensorboard 在与准确度/损失相同的图表上报告它们模型 B 的 output_1。

谷歌搜索给了我一个方法,但它有点麻烦。本质上,我必须为模型 A 定义自定义指标,其功能名称等于模型 B 报告的准确度/损失名称(在上面的第二段中明确引用)。然后我用模型编译这些自定义指标。 所以我正在做一个简短的例子:

Class Model_A():

    def edge_output_acc(self, y_true=None, y_pred=None):
        # effectively hardcodes the binary accuracy as form of accuracy
        return K.mean(K.equal(y_true, K.round(y_pred)))


    def edge_output_loss(self, y_true=None, y_pred=None):
        # effectively hardcodes the binary crossentropy as form of loss
        return K.binary_crossentropy(y_true, y_pred)

    #now compile with something like this
    def new_compile(self, loss, sgd):
       # loss param could get out of sync with the hardcoded loss unless I recreate a lot of Kera's internal switching
       model.compile(loss=loss, optimizer=sgd, metrics=[self.edge_output_acc, self.edge_output_loss])

    #...instead of compiling with something like this
    def old_compile(self, loss, sgd):
        model.compile(loss=loss, optimizer=sgd, metrics=["accuracy"])

这很好,除了它迫使我硬编码用于模型 A 的损失/准确性类型(以便我可以定义这些自定义指标)。我想将这些作为参数提供给我的模型定义脚本,以便建模更加可定制。但在我看来,这基本上意味着我必须在下面的链接Keras training.py/Keras metrics.py 中重现 Keras 的源切换行为,这显然是一件令人头疼的事情,而且是多余的。

有没有更清洁的方法?

谢谢!

作为参考,这些链接更详细地描述了我当前使用的方法以及我在上面描述的方法:

How to use ModelCheckpoint with custom metrics in Keras?

How does keras define “accuracy” and “loss”?

Keras training.py

Keras metrics.py

Keras usage of metrics

Keras usage of losses

【问题讨论】:

  • 所以你想让 Tensorboard 在同一张图上绘制两个损失等?您目前如何将其传递给 Tensorboard 以将其绘制在单独的图表中?
  • 你应该看看 Losswise,它类似于 Tensorboard,它与 Keras 的集成非常容易(docs.losswise.com/#keras-plugin),并且可以轻松地执行诸如查看多个图表之类的操作。

标签: python tensorflow keras metrics tensorboard


【解决方案1】:

我不太了解你的情况。

对我而言,您只需使用日志输出创建正确的树目录结构即可执行此操作,然后从根文件夹启动 Tensorboard。

示例:将 \ 视为根目录,如果您将模型 A 的丢失数据记录在名为 model_A 的文件夹中,并将模型 B 的丢失数据记录在名为 model_B 的文件夹中

  • \
  • \model_A
    • \model_A\output1
  • \model_B
    • \model_B\output1
    • \model_B\output2

如果您从 \ 启动 Tensorboard,您将在同一显示器上获得每个损失。

无论如何,您可以重新定义默认 Tensorboard 回调的行为以满足您的需求。 问候

【讨论】: