如何防止 pytorch Lightning 中的张量板记录器记录当前纪元?

Pau*_*ger 6 python logging tensorboard pytorch pytorch-lightning

在 pytorch Lightning 中创建新的张量板记录器时,默认记录的两件事是当前纪元和 hp_metric。我能够通过设置禁用 hp_metric 日志记录default_hp_metric=False,但我找不到任何可以禁用纪元日志记录的内容。我在 Lightning.py、trainer.py 和 tensorboard.py 文件中进行了搜索,其中包含模块、训练器和张量板记录器的代码,但在任何地方都找不到 epoch 的日志记录调用。

即使采用 pytorch Lightning 教程中的准系统示例,也会发生这种行为。

有没有办法禁用纪元记录以防止张量板界面混乱?

Tensorboard 历元记录

han*_*ul2 3

简而言之

您可以epoch通过覆盖张量板记录器来禁用自动写入变量。

from pytorch_lightning import loggers
from pytorch_lightning.utilities import rank_zero_only

class TBLogger(loggers.TensorBoardLogger):
    @rank_zero_only
    def log_metrics(self, metrics, step):
        metrics.pop('epoch', None)
        return super().log_metrics(metrics, step)
Run Code Online (Sandbox Code Playgroud)

完整版

  • Pytorch Lightning 自动将epochvsglobal_step图表添加到每个记录器。(你可以在这里看到描述)
  • 没有选项可以关闭此行为。因为这是硬编码的,没有任何条件,如下所示:(请参阅此处的完整源代码)
    if step is None:
        # added metrics for convenience
        scalar_metrics.setdefault("epoch", self.trainer.current_epoch)
        step = self.trainer.global_step
    
    # log actual metrics
    self.trainer.logger.agg_and_log_metrics(scalar_metrics, step=step)
    
    Run Code Online (Sandbox Code Playgroud)
  • 要禁用此选项,您应该从中调用的epoch度量字典中弹出变量。代码如上所示。您可以在此处查看完整的长版本片段。log_metrics(metrics, step)add_and_log_metrics(scalar_metrics, step=step)