Мне интересно, как работает image_summary. Существует параметр max_images, который определяет, сколько изображений будет показано. Однако, похоже, в сводке отображаются только изображения из одной партии. Если мы используем большее значение max_iamges, мы просто просмотрим больше изображений из партии. Есть ли способ, которым я могу просматривать, например, одно изображение из каждой партии?
Как использовать image_summary для просмотра изображений из разных партий в Tensorflow?
Ответ 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)