使用TensorFlow的Dataset API进行图像汇总

时间:2017-11-17 07:28:41

标签: api tensorflow dataset summary tensorboard

我使用TensorFlow's Dataset API来加载和预处理图像。我想将我的预处理图像的摘要添加到Tensorboard。

建议的方法是什么?

到目前为止,我的代码看起来像这样:

def get_data():
  dataset = FixedLengthRecordDataset(...)
  dataset = dataset.map(dataset_parser, ...)
  if is_training:
    dataset = dataset.map(preprocess_for_train, ...)
  # Do shuffling, batching...
  return dataset

def preprocess_for_train(image, label):
  # Do preprocessing...
  image = tf.image.random_flip_left_right(image)
  # Add summary
  tf.summary.image('preprocessed_image', tf.expand_dims(image, 0))
  return image, label

preprocess_for_train范围内,我的图片列在SUMMARIES集合中,但在返回外部函数时它不再是图表的一部分。我认为这是因为map使用了不同的线程,因此引用了tf.Graph的不同实例。

由于这不起作用,我还有什么其他选项可以在Tensorboard中显示我的图像?

1 个答案:

答案 0 :(得分:0)

我找到了一个hack,使用迭代器的输出将预处理的图像添加到Tensorboard:

train_dataset = get_data()
iterator = Iterator.from_structure(train_dataset.output_types, train_dataset.output_shapes)
# Batch consists of [image, label]
next_batch = iterator.get_next()
tf.summary.image('preprocessed_image', next_batch[0])

但是,这将在运行summary_op时第二次调用next_batch。它有助于调试图像预处理,但它不是真正训练的解决方案。此外,只能观察到完全预处理的图像,而不是中间预处理阶段。