如何在 Pytorch Lightning(或一般情况下的 tqdm)中禁用 tqdm 的进度条,仅保留文本信息?

4

我正在使用Pytorchlightning,但是tqdm的进度条很不稳定,它一直在从短到长来回调整大小,使得阅读日志文本变得非常不愉快。我意识到进度条并不是必须的,只想保留有关当前epoch、当前batch、准确性、损失等信息的文本。

通过我的搜索,似乎可以禁用整个tqdm显示(包括进度条和文本),但我该如何选择性地禁用进度条而不禁用文本呢?


如果你在Linux上,我相信tqdm默认会将输出导向stderr。因此,你可以通过执行python script.py --arg1 val1 2>/dev/null将stderr重定向到/dev/null。这应该小心谨慎地进行,因为这样做可能会导致你无法看到潜在的错误信息。 - jhso
1个回答

2
“tqdm”的禁用“进度条”(同时保留统计信息的显示)的方法是将“ncols=0”和“dynamic_ncols=False”进行设置(请参见tqdm documentation)。
在“pytorch_lightning”中自定义默认进度条行为的方法是在构建“Trainer”时传递自定义的ProgressBar作为回调函数。
将两者结合起来,如果您想在训练期间修改进度条,可以执行以下操作:
import pytorch_lightning as pl
from pytorch_lightning.callbacks import ProgressBar


class MeterlessProgressBar(ProgressBar):

    def init_train_tqdm(self):
        bar = super().init_train_tqdm()
        bar.dynamic_ncols = False
        bar.ncols = 0
        return bar

bar = MeterlessProgressBar()
trainer = pl.Trainer(callbacks=[bar])

您可以通过重写init_sanity_tqdminit_predict_tqdminit_validation_tqdminit_test_tqdm分别为健全性检查、预测、验证和测试自定义设置。(如果您想快速而简单地对所有进度条进行某种操作,可以考虑重写_update_bar方法。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接