【发布时间】:2019-03-17 22:28:11
【问题描述】:
我有一个非常简单的问题。我有一个为分类定义的 Keras 模型(TF 后端)。我想在训练期间转储输入到我的模型中的训练图像以进行调试。我正在尝试创建一个自定义回调,为此编写 Tensorboard 图像摘要。
但是如何在回调中获取真实的训练数据呢?
目前我正在尝试这个:
class TensorboardKeras(Callback):
def __init__(self, model, log_dir, write_graph=True):
self.model = model
self.log_dir = log_dir
self.session = K.get_session()
tf.summary.image('input_image', self.model.input)
self.merged = tf.summary.merge_all()
if write_graph:
self.writer = tf.summary.FileWriter(self.log_dir, K.get_session().graph)
else:
self.writer = tf.summary.FileWriter(self.log_dir)
def on_batch_end(self, batch, logs=None):
summary = self.session.run(self.merged, feed_dict={})
self.writer.add_summary(summary, batch)
self.writer.flush()
但我收到错误消息: InvalidArgumentError(有关回溯,请参见上文):您必须为占位符张量“input_1”提供一个值,其 dtype 为 float 和 shape [?,224,224,3]
必须有一种方法可以查看作为输入的模型,对吧?
或者我应该尝试其他方式来调试它?
【问题讨论】:
-
虽然您绝对应该能够做到这一点,但为什么不在输入点检查数据呢?例如。您的数据生成器。
-
我正在使用直接输入 model.fit 方法的 tf.data.TFRecords 数据集。要直接检查数据,我必须编写一个逐批检索数据的包装代码。此外,它不会是训练的一部分,而是调试数据的辅助代码。或者,我可以使用回调并保持代码更简单。
-
恐怕这是 Keras 中唯一的解决方案......从来没有在回调中看到任何与数据相关的东西,只有统计数据。
标签: python tensorflow keras