【问题标题】:How to get progress of current epoch during tf.keras training?如何在 tf.keras 训练期间获得当前时代的进展?
【发布时间】:2020-09-21 01:46:11
【问题描述】:

我正在编写一个 GUI 应用程序来训练各种基于 tf.keras 的模型。所以accuracyloss 等的所有信息都应该在 GUI 上可见,而不是默认的 Keras 控制台输出。

现在我设法通过自定义tf.keras.callbacks.Callback 类在模型训练期间获取所有相关信息,该类工作正常。但我也想获得当前纪元的进度,即到目前为止已经训练了当前纪元的百分比,即 Keras 在训练期间通过进度条打印到控制台的内容。

有没有办法在 Keras 回调中检索该信息?

【问题讨论】:

  • 您应该能够从Callback 中的on_train_batch_begin / on_train_batch_end 推断出这一点(如果需要,还可以使用test 回调),但是您需要知道每个时期有多少批次。
  • @jdehesa 谢谢,这是我的“B 计划”,但我希望有更好/更准确的方法。
  • 我不确定这实际上是否可行,您想查看处理单个批次的进度吗? TensorFlow 不提供该信息,您提供输入并最终获得输出,并且在一般情况下,它无法“知道”每个 epoch 有多少批次。您可以尝试花哨并收集每个批次回调的时间,以估计每个批次将花费多长时间(例如,使用某种移动平均线)并据此报告进度......但我不确定这是否可以可能值得付出努力。另请参阅this question
  • @jdehesa 坦率地说,如果情况确实如此,我会感到惊讶。想想训练期间的默认控制台输出。对于每个 epoch,您会看到一个从 0 到 100% 的进度条,指示当前 当前 epoch 的训练距离。所以这个信息一定在 Keras 的某个地方,对吧?编辑:作为最后的手段,我可​​以解析来自培训的控制台输出并使用该信息...
  • 没错,你可以得到一个epoch的进度,但它总是以batch(或者,用Keras的话来说,是“step”)粒度。如果一个 epoch 有 10 个批次,你会看到每一步增加 10%,但你看不到 0% 到 10% 之间的进度。当您输入解决方案时,将当前步骤除以每个时期的步骤数是您的最佳选择。

标签: python tensorflow keras


【解决方案1】:

好的,找到了解决方案。它可以在Callback 类的self.params 属性中找到。
对我来说这是可行的:

def on_epoch_begin(self, epoch, logs=None):
    self.epoch_step = 0

def on_batch_end(self, batch, logs=None):
    self.epoch_step += 1
    progress = self.epoch_step / self.params["steps"]

对于reords,我找到了这个解决方案here in the keras-tqdm GitHub repo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2014-04-08
    • 2020-05-11
    • 2022-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多