首页 > 解决方案 > 如何在 Tensorboard 中显示 10 多张图片?

问题描述

我注意到我将多少图像保存到 tensorboard 日志文件中并不重要,tensorboard 只会显示其中的 10 个(每个标签)。

我们如何增加图像的数量或至少选择显示哪些图像?


要重现我的意思,请按照 MCVE 运行:

import torch
from torch.utils.tensorboard import SummaryWriter
tb = SummaryWriter(comment="test")

for k in range(100):
    # create an image with some funny pattern
    b = [n for (n, c) in enumerate(bin(k)) if c == '1']
    img = torch.zeros((1,10,10))
    img[0, b, :] = 0.5
    img =img + img.permute([0, 2, 1])

    # add the image to the tensorboard file
    tb.add_image(tag="test", img_tensor=img, global_step=k)

这将创建一个runs保存数据的文件夹。从同一个文件夹执行tensorboard --logdir runs,打开浏览器并转到localhost:6006(或替换6006为启动后碰巧显示的任何端口 tensorboard)。然后转到名为“图像”的选项卡并将滑块移动到灰度图像上方。

就我而言,它仅显示步骤中的图像

k = 3, 20, 24, 32, 37, 49, 52, 53, 67, 78

这甚至不是一个很好的均匀间距,但看起来很随机。我宁愿有

  1. 查看我保存的不止 10 张图像,并且
  2. 显示的每个图像之间的步数间距更均匀。

我怎样才能做到这一点?

编辑:我刚刚找到该选项--samples_per_plugin并尝试了tensorboard --logdir runs --samples_per_plugin "images=100". 这确实增加了图像的数量,但它只显示了来自 step 的图像k = 0,1,2,3....,78,而没有显示来自 above的图像78

标签: python-3.xpytorchtensorboardtensorboardx

解决方案


您可能需要等待更长的时间才能等待加载所有数据,但这确实是正确的解决方案,请参阅--help

--samples_per_plugin:一个可选的以逗号分隔的 plugin_name=num_samples 对列表,用于明确指定为该插件的每个标签保留多少样本。对于未指定的插件,TensorBoard 将记录的摘要随机下采样到合理的值,以防止长时间运行的作业出现内存不足错误。该标志允许对下采样进行精细控制。请注意,0 表示保留该类型的所有样本。例如,“scalars=500,images=0”保留 500 个标量和所有图像。大多数用户不需要设置此标志。(默认: '')

关于随机样本:这也是正确的,它有某种随机性,来自常见问题解答

我的数据是否被下采样?我真的看到了所有的数据吗?

TensorBoard 使用水库采样来对数据进行下采样,以便将其加载到 RAM 中。您可以在 tensorboard/backend/application.py 中修改每个标签保留的元素数量。


推荐阅读