【发布时间】:2016-01-26 01:39:45
【问题描述】:
我很好奇 image_summary 的工作原理。有一个名为 max_images 的参数,它控制要显示的图像数量。但是,摘要似乎只显示一批图像。如果我们使用更大的 max_iamges 值,我们只会从批次中查看更多图像。有没有一种方法可以查看例如每批中的一张图片?
【问题讨论】:
标签: python deep-learning tensorflow
我很好奇 image_summary 的工作原理。有一个名为 max_images 的参数,它控制要显示的图像数量。但是,摘要似乎只显示一批图像。如果我们使用更大的 max_iamges 值,我们只会从批次中查看更多图像。有没有一种方法可以查看例如每批中的一张图片?
【问题讨论】:
标签: python deep-learning tensorflow
要查看每批中的一张图像,您需要在每次运行步骤时获取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)
请注意,捕获每个批次的摘要可能效率低下,您可能应该只定期捕获摘要以加快训练速度。
编辑: 上面的代码为每个图像编写了一个单独的摘要,因此您的日志将包含所有图像,但它们不会全部在 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()
【讨论】:
summary_writer.flush() 电话? MergeFromString() 是一个 protobuf 库方法。您还可以尝试将每个批次中的一个图像累积到 tf.FIFOQueue 中,并使用 dequeue_many() 来组装来自不同批次的图像张量。
.MergeFromString 上花点钱吗?例如,假设您在训练循环之外的范围内为权重张量 [32,5,5,3] 定义了 image_summary。并且您正在提供一个合并的对象,它是所有摘要的组合 (merge_all_summaries())。你会在哪里写你的代码 MergeFromString ?您希望最后有 320 张图像(每 100 步 32 张图像)。
我能够通过为每个批次创建一个新的image_summary 操作来解决这个问题。即我从看起来像这样的东西出发:
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)
【讨论】: