torch.utils.tensorboard

原文: https://pytorch.org/docs/stable/tensorboard.html

在继续之前,可以在 https://www.tensorflow.org/tensorboard/ 上找到有关 TensorBoard 的更多详细信息。

安装 TensorBoard 后,这些实用程序使您可以将 PyTorch 模型和指标记录到目录中,以便在 TensorBoard UI 中进行可视化。 PyTorch 模型和张量以及 Caffe2 网络和 Blob 均支持标量,图像,直方图,图形和嵌入可视化。

SummaryWriter 类是您用来登录数据以供 TensorBoard 使用和可视化的主要条目。 例如:

  1. import torch
  2. import torchvision
  3. from torch.utils.tensorboard import SummaryWriter
  4. from torchvision import datasets, transforms
  5. # Writer will output to ./runs/ directory by default
  6. writer = SummaryWriter()
  7. transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
  8. trainset = datasets.MNIST('mnist_train', train=True, download=True, transform=transform)
  9. trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
  10. model = torchvision.models.resnet50(False)
  11. # Have ResNet model take in grayscale rather than RGB
  12. model.conv1 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
  13. images, labels = next(iter(trainloader))
  14. grid = torchvision.utils.make_grid(images)
  15. writer.add_image('images', grid, 0)
  16. writer.add_graph(model, images)
  17. writer.close()

然后可以使用 TensorBoard 对其进行可视化,该 TensorBoard 应该可通过以下方式安装和运行:

  1. pip install tensorboard
  2. tensorboard --logdir=runs

一个实验可以记录很多信息。 为了避免 UI 混乱和更好地将结果聚类,我们可以通过对图进行分层命名来对图进行分组。 例如,“损失/训练”和“损失/测试”将被分组在一起,而“准确性/训练”和“准确性/测试”将在 TensorBoard 界面中分别分组。

  1. from torch.utils.tensorboard import SummaryWriter
  2. import numpy as np
  3. writer = SummaryWriter()
  4. for n_iter in range(100):
  5. writer.add_scalar('Loss/train', np.random.random(), n_iter)
  6. writer.add_scalar('Loss/test', np.random.random(), n_iter)
  7. writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
  8. writer.add_scalar('Accuracy/test', np.random.random(), n_iter)

预期结果:

_images/hier_tags.png


  1. class torch.utils.tensorboard.writer.SummaryWriter(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix=''

将条目直接写入 log_dir 中的事件文件,以供 TensorBoard 使用。

<cite>SummaryWriter</cite> 类提供了一个高级 API,用于在给定目录中创建事件文件并向其中添加摘要和事件。 该类异步更新文件内容。 这允许训练程序从训练循环中调用直接将数据添加到文件的方法,而不会减慢训练速度。


  1. __init__(log_dir=None, comment='', purge_step=None, max_queue=10, flush_secs=120, filename_suffix=''

创建一个 <cite>SummaryWriter</cite> ,它将事件和摘要写到事件文件中。

参数

  • log_dir (字符串)–保存目录位置。 默认值为运行次数/ CURRENT_DATETIME_HOSTNAME ,每次运行后都会更改。 使用分层文件夹结构可以轻松比较运行情况。 例如 为每个新实验传递“ runs / exp1”,“ runs / exp2”等,以便在它们之间进行比较。

  • 注释(字符串)–注释 log_dir 后缀附加到默认值log_dir。 如果分配了log_dir,则此参数无效。

  • purge_step (python:int )–当日志记录在步骤torch.utils.tensorboard - 图2崩溃并在步骤torch.utils.tensorboard - 图3重新启动时,将清除 global_step 大于或等于torch.utils.tensorboard - 图4的所有事件, 隐藏在 TensorBoard 中。 请注意,崩溃的实验和恢复的实验应具有相同的log_dir

  • max_queue (python:int )–在“添加”调用之一强行刷新到磁盘之前,未决事件和摘要的队列大小。 默认值为十个项目。

  • flush_secs (python:int )–将挂起的事件和摘要刷新到磁盘的频率(以秒为单位)。 默认值为每两分钟一次。

  • filename_suffix (字符串)–后缀添加到 log_dir 目录中的所有事件文件名中。 在 tensorboard.summary.writer.event_file_writer.EventFileWriter 中有关文件名构造的更多详细信息。

例子:

  1. from torch.utils.tensorboard import SummaryWriter
  2. # create a summary writer with automatically generated folder name.
  3. writer = SummaryWriter()
  4. # folder location: runs/May04_22-14-54_s-MacBook-Pro.local/
  5. # create a summary writer using the specified folder name.
  6. writer = SummaryWriter("my_experiment")
  7. # folder location: my_experiment
  8. # create a summary writer with comment appended.
  9. writer = SummaryWriter(comment="LR_0.1_BATCH_16")
  10. # folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/

  1. add_scalar(tag, scalar_value, global_step=None, walltime=None

将标量数据添加到摘要中。

Parameters

  • 标记(字符串)–数据标识符

  • 标量值 (python:float 字符串/名称)–要保存的值

  • global_step (python:int )–要记录的全局步长值

  • walltime (python:float )–可选,以事件发生后的秒数覆盖默认的 walltime(time.time())

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. writer = SummaryWriter()
  3. x = range(100)
  4. for i in x:
  5. writer.add_scalar('y=2x', i * 2, i)
  6. writer.close()

Expected result:

_images/add_scalar.png


  1. add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None

将许多标量数据添加到摘要中。

请注意,此函数还将已记录的标量保存在内存中。 在极端情况下,它会炸毁您的 RAM。

Parameters

  • main_tag (字符串)–标记的父名称

  • tag_scalar_dict (dict )–存储标签和对应值的键值对

  • global_step (python:int) – Global step value to record

  • walltime (python:float )–可选的替代默认时间 Walltime(time.time())秒

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. writer = SummaryWriter()
  3. r = 5
  4. for i in range(100):
  5. writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r),
  6. 'xcosx':i*np.cos(i/r),
  7. 'tanx': np.tan(i/r)}, i)
  8. writer.close()
  9. # This call adds three values to the same scalar plot with the tag
  10. # 'run_14h' in TensorBoard's scalar section.

Expected result:

_images/add_scalars.png


  1. add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None

将直方图添加到摘要中。

Parameters

  • tag (string) – Data identifier

  • (torch张量 numpy.array 字符串/名称)–建立直方图的值

  • global_step (python:int) – Global step value to record

  • 容器(字符串)– {‘tensorflow’,’auto’,’fd’,…}中的一种。 这决定了垃圾桶的制作方式。 您可以在以下位置找到其他选项: https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. import numpy as np
  3. writer = SummaryWriter()
  4. for i in range(10):
  5. x = np.random.random(1000)
  6. writer.add_histogram('distribution centers', x + i, i)
  7. writer.close()

Expected result:

_images/add_histogram.png


  1. add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'

将图像数据添加到摘要。

注意,这需要pillow程序包。

Parameters

  • tag (string) – Data identifier

  • img_tensor (torch张量 numpy.array 字符串/名称)–图像数据

  • global_step (python:int) – Global step value to record

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

  1. Shape:

img_tensor:默认为torch.utils.tensorboard - 图8。 您可以使用torchvision.utils.make_grid()将一批张量转换为 3xHxW 格式,或者调用add_images让我们完成这项工作。 只要传递了相应的dataformats自变量,也可以使用带有torch.utils.tensorboard - 图9torch.utils.tensorboard - 图10torch.utils.tensorboard - 图11的张量。 例如 CHW,HWC,HW。

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. import numpy as np
  3. img = np.zeros((3, 100, 100))
  4. img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
  5. img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
  6. img_HWC = np.zeros((100, 100, 3))
  7. img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
  8. img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
  9. writer = SummaryWriter()
  10. writer.add_image('my_image', img, 0)
  11. # If you have non-default dimension setting, set the dataformats argument.
  12. writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
  13. writer.close()

Expected result:

_images/add_image.png


  1. add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW'

将批处理的图像数据添加到摘要中。

Note that this requires the pillow package.

Parameters

  • tag (string) – Data identifier

  • img_tensor (torch.Tensor, numpy.array__, or string/blobname) – Image data

  • global_step (python:int) – Global step value to record

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

  • 数据格式(字符串)– NCHW,NHWC,CHW,HWC,HW,WH 等形式的图像数据格式规范

  1. Shape:

img_tensor:默认为torch.utils.tensorboard - 图13。 如果指定dataformats,将接受其他形状。 例如 NCHW 或 NHWC。

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. import numpy as np
  3. img_batch = np.zeros((16, 3, 100, 100))
  4. for i in range(16):
  5. img_batch[i, 0] = np.arange(0, 10000).reshape(100, 100) / 10000 / 16 * i
  6. img_batch[i, 1] = (1 - np.arange(0, 10000).reshape(100, 100) / 10000) / 16 * i
  7. writer = SummaryWriter()
  8. writer.add_images('my_image_batch', img_batch, 0)
  9. writer.close()

Expected result:

_images/add_images.png


  1. add_figure(tag, figure, global_step=None, close=True, walltime=None

将 matplotlib 图形渲染为图像,并将其添加到摘要中。

注意,这需要matplotlib程序包。

Parameters

  • tag (string) – Data identifier

  • 图形 (matplotlib.pyplot.figure )–图形或图形列表

  • global_step (python:int) – Global step value to record

  • 关闭 (bool )–自动关闭图形的标志

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event


  1. add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None

将视频数据添加到摘要。

注意,这需要moviepy程序包。

Parameters

  • tag (string) – Data identifier

  • vid_tensor (torch张量)–视频数据

  • global_step (python:int) – Global step value to record

  • fps (python:float python:int )–每秒帧数

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

  1. Shape:

vid_tensor:torch.utils.tensorboard - 图15。 对于 <cite>uint8</cite> 类型,值应位于[0,255]中;对于 <cite>float</cite> 类型,值应位于[0,1]中。


  1. add_audio(tag, snd_tensor, global_step=None, sample_rate=44100, walltime=None

将音频数据添加到摘要。

Parameters

  • tag (string) – Data identifier

  • snd_tensor (torch张量)–声音数据

  • global_step (python:int) – Global step value to record

  • sample_rate (python:int )–以 Hz 为单位的采样率

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

  1. Shape:

snd_tensor:torch.utils.tensorboard - 图16。 值应介于[-1,1]之间。


  1. add_text(tag, text_string, global_step=None, walltime=None

将文本数据添加到摘要。

Parameters

  • tag (string) – Data identifier

  • text_string (字符串)–要保存的字符串

  • global_step (python:int) – Global step value to record

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

Examples:

  1. writer.add_text('lstm', 'This is an lstm', 0)
  2. writer.add_text('rnn', 'This is an rnn', 10)

  1. add_graph(model, input_to_model=None, verbose=False

  1. add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None

将嵌入的投影仪数据添加到摘要中。

Parameters

  • (torch张量 numpy.array )–矩阵,每行是特征向量 数据点

  • 元数据(列表)–标签列表,每个元素将转换为字符串

  • label_img (炬管张紧器)–图像对应于每个数据点

  • global_step (python:int) – Global step value to record

  • 标签(字符串)–嵌入的名称

  1. Shape:

垫子:torch.utils.tensorboard - 图17,其中 N 是数据数量,D 是特征尺寸

label_img:torch.utils.tensorboard - 图18

Examples:

  1. import keyword
  2. import torch
  3. meta = []
  4. while len(meta)<100:
  5. meta = meta+keyword.kwlist # get some strings
  6. meta = meta[:100]
  7. for i, v in enumerate(meta):
  8. meta[i] = v+str(i)
  9. label_img = torch.rand(100, 3, 10, 32)
  10. for i in range(100):
  11. label_img[i]*=i/100.0
  12. writer.add_embedding(torch.randn(100, 5), metadata=meta, label_img=label_img)
  13. writer.add_embedding(torch.randn(100, 5), label_img=label_img)
  14. writer.add_embedding(torch.randn(100, 5), metadata=meta)

  1. add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None

添加精度召回曲线。 绘制精确召回曲线可以让您了解模型在不同阈值设置下的性能。 使用此功能,您可以为每个目标提供地面真相标签(T / F)和预测置信度(通常是模型的输出)。 TensorBoard UI 将允许您交互选择阈值。

Parameters

  • tag (string) – Data identifier

  • 标签 (torch张量 numpy.array 字符串/名称)–基本事实数据。 每个元素的二进制标签。

  • 预测 (torch张量 numpy.array string / blobname )–元素归类为 true 的概率。 值应为[0,1]

  • global_step (python:int) – Global step value to record

  • num_thresholds (python:int )–用于绘制曲线的阈值数。

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. import numpy as np
  3. labels = np.random.randint(2, size=100) # binary label
  4. predictions = np.random.rand(100)
  5. writer = SummaryWriter()
  6. writer.add_pr_curve('pr_curve', labels, predictions, 0)
  7. writer.close()

  1. add_custom_scalars(layout

通过在“标量”中收集图表标签来创建特殊图表。 请注意,该函数只能为每个 SummaryWriter()对象调用一次。 因为它仅向张量板提供元数据,所以可以在训练循环之前或之后调用该函数。

Parameters

布局 (dict )– {类别名称:图表},其中图表也是字典{chartName: ListOfProperties ]}。 ListOfProperties 中的第一个元素是图表的类型(多线保证金之一),第二个元素应是包含您在 add_scalar 中使用的标签的列表。 函数,它将被收集到新图表中。

Examples:

  1. layout = {'Taiwan':{'twse':['Multiline',['twse/0050', 'twse/2330']]},
  2. 'USA':{ 'dow':['Margin', ['dow/aaa', 'dow/bbb', 'dow/ccc']],
  3. 'nasdaq':['Margin', ['nasdaq/aaa', 'nasdaq/bbb', 'nasdaq/ccc']]}}
  4. writer.add_custom_scalars(layout)

  1. add_mesh(tag, vertices, colors=None, faces=None, config_dict=None, global_step=None, walltime=None

将网格或 3D 点云添加到 TensorBoard。 可视化基于 Three.js,因此它允许用户与渲染的对象进行交互。 除了顶点,面部之类的基本定义外,用户还可以提供相机参数,光照条件等。请检查 https://threejs.org/docs/index.html#manual/en/introduction/Creating-a -scene 用于高级用法。

Parameters

  • tag (string) – Data identifier

  • 顶点 (torch张量)–顶点的 3D 坐标列表。

  • 颜色 (torch张量)–每个顶点的颜色

  • (torch张量)–每个三角形内的顶点的索引。 (可选的)

  • config_dict –具有 ThreeJS 类名称和配置的字典。

  • global_step (python:int) – Global step value to record

  • walltime (python:float) – Optional override default walltime (time.time()) seconds after epoch of event

  1. Shape:

顶点:torch.utils.tensorboard - 图19。 (批次,顶点数,渠道)

颜色:torch.utils.tensorboard - 图20。 对于 <cite>uint8</cite> 类型,值应位于[0,255]中;对于 <cite>float</cite> 类型,值应位于[0,1]中。

面孔:torch.utils.tensorboard - 图21。 对于 <cite>uint8</cite> 类型,这些值应位于[0,number_of_vertices]中。

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. vertices_tensor = torch.as_tensor([
  3. [1, 1, 1],
  4. [-1, -1, 1],
  5. [1, -1, -1],
  6. [-1, 1, -1],
  7. ], dtype=torch.float).unsqueeze(0)
  8. colors_tensor = torch.as_tensor([
  9. [255, 0, 0],
  10. [0, 255, 0],
  11. [0, 0, 255],
  12. [255, 0, 255],
  13. ], dtype=torch.int).unsqueeze(0)
  14. faces_tensor = torch.as_tensor([
  15. [0, 2, 3],
  16. [0, 3, 1],
  17. [0, 1, 2],
  18. [1, 3, 2],
  19. ], dtype=torch.int).unsqueeze(0)
  20. writer = SummaryWriter()
  21. writer.add_mesh('my_mesh', vertices=vertices_tensor, colors=colors_tensor, faces=faces_tensor)
  22. writer.close()

  1. add_hparams(hparam_dict=None, metric_dict=None

添加一组要在 TensorBoard 中进行比较的超参数。

Parameters

  • hparam_dict (dict )–字典中的每个键值对都是超参数的名称及其对应的值。

  • metric_dict (dict )–词典中的每个键值对都是指标的名称及其对应的值。 请注意,此处使用的密钥在张量板记录中应该是唯一的。 否则,由add_scalar添加的值将显示在 hparam 插件中。 在大多数情况下,这是不需要的。

Examples:

  1. from torch.utils.tensorboard import SummaryWriter
  2. with SummaryWriter() as w:
  3. for i in range(5):
  4. w.add_hparams({'lr': 0.1*i, 'bsize': i},
  5. {'hparam/accuracy': 10*i, 'hparam/loss': 10*i})

Expected result:

_images/add_hparam.png


  1. flush()¶

将事件文件刷新到磁盘。 调用此方法以确保所有未决事件均已写入磁盘。


  1. close()¶