首页 > 解决方案 > 记录 TensorBoard 2.1 正则化损失的推荐方法是什么

问题描述

我希望能够使用 TensorBoard 监控模型正则化损失的演变(我使用的是 TensorFlow 2.1)。

到目前为止,我已经设置了一个tf.keras.callbacks.TensorBoard回调传递给tf.keras.Model.fit. 它允许我监控总损失和学习率:

在此处输入图像描述

回调默认记录它们。

然而,总损失由多个项组成(例如正则化损失)。如何轻松监控它们?

  1. tf.keras.callbacks.TensorBoard似乎不支持这一点。正确的?
  2. 我找到了这个文档部分:记录自定义标量。但是,该示例显示了如何在每个时期结束时监视标量,而我正在寻找在每个批次结束时收集标量并在每个时期结束时记录平均值的东西。
  3. 我想我可以编写一个自定义回调,但我可以避免花时间在这上面吗?
  4. 还有其他解决方案吗?

因此我的问题是,为 TensorBoard 2.1 记录正则化损失的推荐方法是什么?

标签: pythontensorflowdeep-learningtensorboard

解决方案


TensorBoard您可以通过从回调继承并手动添加所需数量来创建自己的回调。

这是我为此目的使用的代码。在这种情况下,您将获得每个层的正则化损失的单独图表。

class CustomTBCallback(keras.callbacks.TensorBoard):
    def _log_metrics(self, logs, prefix, step):
        for layer in self.model.layers:
            if layer.losses:
                logs["reg_%s" % layer.name] = tf.reduce_sum(layer.losses)
        super()._log_metrics(logs, prefix, step)

不幸的是,这有点棘手,因为它依赖于_log_metrics可能在不同版本的 tensorflow 之间发生变化的私有函数。我已经将它与 tf 2.0 一起使用。


推荐阅读