【问题标题】:How to use image_summary to view images from different batches in Tensorflow?如何使用 image_summary 在 TensorFlow 中查看不同批次的图像?
【发布时间】:2016-01-26 01:39:45
【问题描述】:

我很好奇 image_summary 的工作原理。有一个名为 max_images 的参数,它控制要显示的图像数量。但是,摘要似乎只显示一批图像。如果我们使用更大的 max_iamges 值,我们只会从批次中查看更多图像。有没有一种方法可以查看例如每批中的一张图片?

【问题讨论】:

    标签: python deep-learning 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)
    

    请注意,捕获每个批次的摘要可能效率低下,您可能应该只定期捕获摘要以加快训练速度。

    编辑: 上面的代码为每个图像编写了一个单独的摘要,因此您的日志将包含所有图像,但它们不会全部在 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()
    

    【讨论】:

    • 我试过你的方法,但它只显示了一张图片。我想知道你的结果是什么样的?
    • 我在评论中添加了一些内容,可能会帮助您可视化不同的图像。
    • 感谢您的笔记,但它似乎仍然无法正常工作。日志文件只有 820k,可以包含这么多图像。顺便说一句,我可以找到关于 tf.Summary() 和 MergeFromString 方法的参考,这是唯一的方法吗?
    • 也许您需要一个summary_writer.flush() 电话? MergeFromString() 是一个 protobuf 库方法。您还可以尝试将每个批次中的一个图像累积到 tf.FIFOQueue 中,并使用 dequeue_many() 来组装来自不同批次的图像张量。
    • @mrry 你能在.MergeFromString 上花点钱吗?例如,假设您在训练循环之外的范围内为权重张量 [32,5,5,3] 定义了 image_summary。并且您正在提供一个合并的对象,它是所有摘要的组合 (merge_all_summaries())。你会在哪里写你的代码 MergeFromString ?您希望最后有 320 张图像(每 100 步 32 张图像)。
    【解决方案2】:

    我能够通过为每个批次创建一个新的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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2016-10-07
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多