使用 Keras 和 fit_generator 的 TensorBoard 分布和直方图

Posted

技术标签:

【中文标题】使用 Keras 和 fit_generator 的 TensorBoard 分布和直方图【英文标题】:TensorBoard Distributions and Histograms with Keras and fit_generator 【发布时间】:2017-07-14 12:44:44 【问题描述】:

我正在使用 Keras 使用 fit_generator 函数训练 CNN。

似乎是known issue,TensorBoard 在此设置中没有显示直方图和分布。

有没有人想办法让它发挥作用?

【问题讨论】:

【参考方案1】:

没有简单的方法只用一行代码插入它,您必须手动编写摘要。

好消息是它并不难,你可以使用 Keras 中的TensorBoard callback code 作为参考。 (还有一个 version 2 为 TensorFlow 2.x 做好准备。)

基本上,编写一个函数,例如write_summaries(model) 并在您想编写摘要时调用它(例如,就在您的 fit_generator() 之后)

在您的 write_summaries(model) 函数中,使用 tf.summaryhistogram_summary 和其他摘要函数来记录您希望在 tensorboard 上看到的数据。

如果您不知道如何查看official tutorial: 还有这个MNIST with summaries 的好例子。

【讨论】:

【参考方案2】:

我相信 bartgras 的解释已被最新版本的 Keras 所取代(我使用的是 Keras 2.2.2)。为了在 Tensorboard 中获取直方图,我所做的一切如下,(其中bg 是一个数据整理类,它公开了gb.training_batch() 的生成器;gb.validation_batch() 但不是生成器):

NAME = "Foo_".format(datetime.now().isoformat(timespec='seconds')).replace(':', '-')

tensorboard = keras.callbacks.TensorBoard(
    log_dir="logs/".format(NAME),
    histogram_freq=1,
    write_images=True)

callbacks = [
    tensorboard
]

history = model.fit_generator(
    bg.training_batch(),
    validation_data=bg.validation_batch(),
    epochs=EPOCHS,
    steps_per_epoch=bg.steps_per_epoch,
    validation_steps=bg.validation_steps,
    verbose=1,
    shuffle=False,
    callbacks=callbacks)

【讨论】:

这里的名字是什么? 我使用的是 Keras 2.2.4,但仍然ValueError: If printing histograms, validation_data must be provided, and cannot be a generator. @thebeancounter 您运行的名称。你可以把它变成你的超参数或者人类可读的东西。 -1 用于非信息性代码。什么是bgtraining_batch()validation_batch()?我们甚至无法判断您传递的是发电机还是其他东西。

以上是关于使用 Keras 和 fit_generator 的 TensorBoard 分布和直方图的主要内容,如果未能解决你的问题,请参考以下文章

Keras:网络不使用 fit_generator() 进行训练

keras:为 fit_generator 使用 ImageDataGenerator 和 KFold 的问题

keras 入门整理 如何shuffle,如何使用fit_generator

keras中fit_generator()的优势

使用 Keras fit_generator 和 datagen.flow 时出现内存错误

keras/scikit-learn:使用 fit_generator() 进行交叉验证