Как использовать image_summary для просмотра изображений из разных партий в Tensorflow?

Мне интересно, как работает image_summary. Существует параметр max_images, который определяет, сколько изображений будет показано. Однако, похоже, в сводке отображаются только изображения из одной партии. Если мы используем большее значение max_iamges, мы просто просмотрим больше изображений из партии. Есть ли способ, которым я могу просматривать, например, одно изображение из каждой партии?

Ответ 1

Чтобы просмотреть одно изображение из каждой партии, вам нужно получить результат tf.image_summary() при каждом шаге. Например, у вас есть следующая настройка:

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)

... вы можете настроить цикл тренировки для захвата одного изображения на итерацию следующим образом:

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

Обратите внимание, что сбор итогов для каждой партии может быть неэффективным, и вам, вероятно, следует лишь периодически собирать сводки для более быстрого обучения.

EDIT:. Приведенный выше код записывает отдельное резюме для каждого изображения, поэтому ваш журнал будет содержать все изображения, но они не будут отображаться в TensorBoard. Если вы хотите комбинировать свои резюме для визуализации изображений из нескольких партий, вы можете сделать следующее:

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

Ответ 2

Я смог решить это, создав новый image_summary op для каждой партии. то есть я перешел от чего-то похожего:

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)

(Что, к сожалению, не делало то, что я ожидал.) Чтобы...

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)