【发布时间】:2020-09-21 01:46:11
【问题描述】:
我正在编写一个 GUI 应用程序来训练各种基于 tf.keras 的模型。所以accuracy、loss 等的所有信息都应该在 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