Keras CNN,详细的训练进度条显示

时间:2017-05-15 12:36:13

标签: python tensorflow progress-bar keras

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

progress bar for each batch

是否可以显示每个纪元的进度条?喜欢这个

enter image description here

以下是我使用model.fit(x_train, y_train, nb_epoch = 1, batch_size = 32, verbose=1)的方法 我试图将verbose设置为0和2,但没有进度条。

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

4 个答案:

答案 0 :(得分: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中,并为我解决了该问题。

答案 1 :(得分:0)

作为Windows操作系统上的快速解决方案,您可以最大化命令提示符窗口。这将根据需要准确显示每个纪元的进度条。

答案 2 :(得分:0)

正如问题所指出的,这是针对我们要导入且已定义进度条的软件包。

就我而言,将所有更新打印在一个looooong行上使问题更加复杂。 (PyCHARM不会将\ r视为EOL吗?)

如果您希望快速而肮脏地解决进度条问题,这有助于减轻问题:

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

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

答案 3 :(得分:0)

我认为这是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表示仅显示纪元(从不显示批处理条)。