Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use image_summary to view images from different batches in Tensorflow?

I am curious about how image_summary works. There is a parameter called max_images, which controls how many images would be shown. However it seems the summary only displays images from one batch. If we use bigger value of max_iamges, we will just view more images from the batch. Is there a way I can view for example one image from each batch?

like image 250
Tong Shen Avatar asked Jan 26 '16 01:01

Tong Shen


1 Answers

To view one image from each batch, you need to fetch the result of the tf.image_summary() op every time you run a step. For example, it you have the following setup:

images = ...
loss = ...
optimizer = ...

train_op = optimizer.minimize(loss)
init_op = tf.initialize_all_variables()
image_summary_t = tf.image_summary(images.name, images, max_images=1)

sess = tf.Session()
summary_writer = tf.train.SummaryWriter(...)
sess.run(init_op)

...you could set up your training loop to capture one image per iteration as follows:

for _ in range(10000):
    _, image_summary = sess.run([train_op, image_summary_t])
    summary_writer.add_summary(image_summary)

Note that capturing summaries on each batch might be inefficient, and you should probably only capture the summary periodically for faster training.

EDIT: The above code writes a separate summary for each image, so your log will contain all of the images, but they will not all be visualized in TensorBoard. If you want to combine your summaries to visualize images from multiple batches, you could do the following:

combined_summary = tf.Summary()
for i in range(10000):
    _, image_summary = sess.run([train_op, image_summary_t])
    combined_summary.MergeFromString(image_summary)
    if i % 10 == 0:
        summary_writer.add_summary(combined_summary)
        combined_summary = tf.Summary()
like image 144
mrry Avatar answered Sep 26 '22 07:09

mrry