【问题标题】:Keras CNN, verbose training progress bar displayKeras CNN,详细训练进度条显示
【发布时间】:2017-10-14 06:06:34
【问题描述】:

在 Keras 中运行 CNN。当它开始运行model.fit 时,它会为每个批次打印进度条,如下所示

是否可以显示每个 epoch 的进度条?像这样

这是我如何使用model.fit(x_train, y_train, nb_epoch = 1, batch_size = 32, verbose=1) 我尝试将verbose设置为0和2,但是没有进度条。

如果您有任何想法,请告诉我。非常感谢

【问题讨论】:

  • 设置verbose=1(进度条日志记录)是否符合您的要求?
  • 感谢您的回复。我想要的只是一个进度条记录。比如第二批(64/60000)进度条替换(32/60000)进度条在同一个地方等等。我不想打印第二个进度条。所以对于 1 个 epoch,只有一个进度条
  • 实际上它应该看起来像您想要的那样。因此,一定有一些错误会阻止它以应有的方式在您的系统上工作。您使用的是哪个操作系统和终端?
  • 是的,这似乎是终端/操作系统问题,而不是一般的 Keras 问题。您的终端会误解 \r 或 \b 字符吗?
  • 大约 2000 个批次后是否出现箭头?

标签: python tensorflow progress-bar keras


【解决方案1】:

我在https://stackoverflow.com/a/57475559/9531617 中提供了一个解决方案(不确定是否适用于所有情况,但对我来说效果很好)。引用我自己的话:


只需安装ipykernel 并将其导入您的代码即可解决问题,而无需修改源代码:

pip install ipykernel 然后 import ipykernel

事实上,在 Keras generic_utils.py 文件中,探测行是(在我的例子中):

            if self._dynamic_display:
                sys.stdout.write('\b' * prev_total_width)
                sys.stdout.write('\r')
            else:
                sys.stdout.write('\n')

self._dynamic_displayFalse,而它需要为 True 才能正常工作。但是 self._dynamic_display 的值是这样启动的:

        self._dynamic_display = ((hasattr(sys.stdout, 'isatty') and
                                  sys.stdout.isatty()) or
                                 'ipykernel' in sys.modules)

因此,加载 ipykernel 将其添加到 sys.modules 并为我解决了问题。

【讨论】:

    【解决方案2】:

    作为在 Windows 操作系统上的快速修复,您可以最大化命令提示符窗口。这将根据需要准确显示每个时期的进度条。

    【讨论】:

      【解决方案3】:

      正如问题所述,这是针对我们正在导入且已定义进度条的包。

      在我的情况下,将所有更新打印在一个 looooong 行上,问题变得更加复杂。 (PyCHARM 不将 \r 视为 EOL?)

      如果您想快速解决进度条问题,这有助于缓解问题:

      tensorflow_core.python.keras.utils.generic_utils.Progbar.__init__.__defaults__ = (10, 0, 5.0, None, 'step')
      

      如果您想花更多时间学习 Keras 而减少奇怪的 UI 问题,则可以使用。

      【讨论】:

        【解决方案4】:

        我认为这是 Keras verbose training progress bar writing a new line on each batch issue 的副本,但您可以改用 tqdm (>=4.41.0):

        from tqdm.keras import TqdmCallback
        ...
        model.fit(..., verbose=0, callbacks=[TqdmCallback(verbose=2)])
        

        这会关闭 keras' 进度 (verbose=0),并改用 tqdm。对于回调,verbose=2 表示时期和批次的单独进度条。 1 表示完成后清除批处理栏。 0 表示仅显示 epoch(从不显示批处理条)。

        【讨论】:

          猜你喜欢
          • 2019-09-24
          • 2017-12-25
          • 1970-01-01
          • 2019-12-14
          • 2020-08-03
          • 1970-01-01
          • 2016-12-31
          • 2017-07-07
          • 2019-01-25
          相关资源
          最近更新 更多