¿Cómo usar image_summary para ver imágenes de diferentes lotes en Tensorflow?

Tengo curiosidad acerca de cómo funciona image_summary. Hay un parámetro llamado max_images, que controla la cantidad de imágenes que se mostrarán. Sin embargo, parece que el resumen solo muestra imágenes de un lote. Si utilizamos un valor mayor de max_iamges, solo veremos más imágenes del lote. ¿Hay alguna manera de ver, por ejemplo, una imagen de cada lote?

Para ver una imagen de cada lote, debe obtener el resultado de la tf.image_summary() cada vez que ejecute un paso. Por ejemplo, si tiene la siguiente configuración:

 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) 

… puede configurar su ciclo de entrenamiento para capturar una imagen por iteración de la siguiente manera:

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

Tenga en cuenta que la captura de resúmenes en cada lote puede ser ineficiente, y probablemente solo debería capturar el resumen periódicamente para una capacitación más rápida.

EDITAR: El código anterior escribe un resumen separado para cada imagen, por lo que su registro contendrá todas las imágenes, pero no todas se visualizarán en TensorBoard. Si desea combinar sus resúmenes para visualizar imágenes de varios lotes, puede hacer lo siguiente:

 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() 

Pude resolver esto creando una nueva image_summary para cada lote. Es decir, me fui de algo que parecía:

 train_writer = tf.train.SummaryWriter('summary_dir') img = tf.image_summary("fooImage", img_data) for i in range(N_BATCHES): summary, _ = sess.run([img, train_step]) train_writer.add_summary(summary, i) 

(Lo cual, frustrantemente, no estaba haciendo lo que esperaba). Para …

 train_writer = tf.train.SummaryWriter('summary_dir') for i in range(N_BATCHES): # Images are sorted in lexicographic order, so zero-pad the name img = tf.image_summary("fooImage{:06d}".format(i), img_data) summary, _ = sess.run([img, train_step]) train_writer.add_summary(summary)