Keras验证进度输出错误地显示了培训步骤



当我对模型调用model.fit_generator((时,它会在输出中显示您所期望的训练进度。然而,它最终只差一个最大值,然后进入验证。验证显示与训练相同的进度条,尽管验证步骤完全不同(~70k训练步骤/8k val步骤(。验证进度条在达到8k步时停止,例如:

75999/76000 [===========================>..] - ETA: 0s - loss: 0.4556 - acc: 0.840Epoch 1/500
8200/76000 [====>........................] - ETA: 0s - loss: 0.9822 - acc: 0.7564

第一行是培训,第二行是验证。

当我手动更改步骤,使训练步骤比val步骤少时,我得到以下输出:

19/20 [===========================>..] - ETA: 0s - loss: 0.4558 - acc: 0.8980Epoch 1/500
19/20 [===========================>..] - ETA: 0s - loss: 0.8200 - acc: 0.7730

在执行其余验证步骤时,它会在此输出上暂停。其余验证的输出不会显示在进度栏中。

当val_steps和train_steps是从我的生成器生成的,或者当我如上所述手动设置它们时,就会出现这个错误,所以问题不在我的生成器上——我想。这是我对fit_generator((的调用(当我使用.fit((时是一样的(

model.fit_generator(
train_generator,
steps_per_epoch=train_steps,
epochs=epochs,
validation_data=val_generator,
validation_steps=val_steps,
verbose=1,
callbacks=[weight_saving_callback,early_stopping],
max_queue_size=40,
workers=1,
use_multiprocessing=False,
#train_class_weight=None, #because we are not using target classes
#val_class_weight=None, #because we are not using target classes
validation_freq=1)

有人能看到这个bug在哪里吗?我不认为这会影响训练过程,只是影响输出,但我不知道问题出在哪里。使用TF 2.1和Keras 2.3.1。

简单地说:为什么验证进度条没有显示正确的验证步骤数?

我的经验是,如果你试图在一个纪元结束时打印出你自己的信息,它会打乱tensorflow打印输出。我最终要做的是为要打印的项创建类变量,并将它们传递给on_etic_begin函数,然后在那里打印信息。这似乎并没有打乱tensorflow在一个时代结束时的打印输出。

最新更新