【问题标题】:Keras validation progress output incorrectly shows training stepsKeras 验证进度输出错误地显示了训练步骤
【发布时间】:2020-12-04 18:00:00
【问题描述】:

当我对我的模型调用 model.fit_generator() 时,它会在输出中显示您所期望的训练进度。然而,它完成了一个最大值,然后移动到验证。验证显示与训练相同的进度条,即使验证步骤完全不同(~70k 训练步骤/8k 验证步骤)。验证进度条在达到 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)

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

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

【问题讨论】:

  • 什么是 weight_saving_callback?它会在一个时期打印出任何东西吗?
  • 它只是保存模型的权重,如果它们在损失指标方面是迄今为止最好的。它只是打印出损失是否在一个时期有所改善,以及一些指标

标签: python tensorflow machine-learning keras tensorflow2.0


【解决方案1】:

我的经验是,如果您试图在一个 epoch 结束时打印出自己的信息,则会弄乱 tensorflow 打印输出。我最终要做的是为要打印的项目创建类变量,并将它们传递给 on_epoch_begin 函数并在那里打印信息。这似乎不会在一个纪元结束时弄乱 tensorflow 的打印输出。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2020-05-24
    • 1970-01-01
    • 2019-09-24
    • 2017-12-25
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多