目录

torch.utils.tensorboard

在进一步讨论之前,可以在 https://www.tensorflow.org/tensorboard/ 中找到有关 TensorBoard 的更多详细信息

安装 TensorBoard 后,这些实用程序允许您记录 PyTorch 模型 和指标复制到一个目录中,以便在 TensorBoard UI 中进行可视化。 标量、图像、直方图、图形和嵌入可视化效果都是 支持 PyTorch 模型和张量以及 Caffe2 网络和 blob。

SummaryWriter 类是记录数据以供使用的主要条目 以及 TensorBoard 的可视化。例如:

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets, transforms

# Writer will output to ./runs/ directory by default
writer = SummaryWriter()

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST('mnist_train', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
model = torchvision.models.resnet50(False)
# Have ResNet model take in grayscale rather than RGB
model.conv1 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
images, labels = next(iter(trainloader))

grid = torchvision.utils.make_grid(images)
writer.add_image('images', grid, 0)
writer.add_graph(model, images)
writer.close()

然后可以使用 TensorBoard 进行可视化,它应该是可安装的 并可运行:

pip install tensorboard
tensorboard --logdir=runs

一个实验可以记录大量信息。为避免杂乱 UI 并获得更好的结果聚类,我们可以通过命名来对绘图进行分组 分层。例如,“Loss/train” 和 “Loss/test” 将被分组 一起,而 “Accuracy/train” 和 “Accuracy/test” 将分别分组 在 TensorBoard 界面中。

from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()

for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)

预期结果:

_images/hier_tags.png


class log_dir=comment=''purge_step=max_queue=10flush_secs=120filename_suffix=''[来源]torch.utils.tensorboard.writer.SummaryWriter

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

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

__init__(log_dir=注释=''purge_step=max_queue=10,flush_secs=120filename_suffix=''[来源]

创建一个 SummaryWriter,它将写出事件和摘要 添加到事件文件中。

参数
  • log_dirstring) – 保存目录位置。默认值为 runs/CURRENT_DATETIME_HOSTNAME,每次运行后都会更改。 使用分层文件夹结构进行比较 之间轻松运行。例如,传入 'runs/exp1'、'runs/exp2' 等。 对于每个新实验进行比较。

  • commentstring) – 附加到默认值的 comment log_dir 后缀。如果分配,则此参数无效。log_dirlog_dir

  • purge_stepint) – 当日志记录在步骤T+XT+X并在 Step 中重新开始TT, global_step大于或等于TT将是 从 TensorBoard 中清除和隐藏。 请注意,crashed 和 resumed 实验应具有相同的 .log_dir

  • max_queueint) – 待处理事件的队列大小,以及 摘要,然后 'add' 调用之一强制刷新到磁盘。 默认值为 10 个项目。

  • flush_secsint) – 刷新 待处理事件和摘要到磁盘。默认值为每 2 分钟一次。

  • filename_suffixstring) – 添加到 中的所有事件文件名的后缀 log_dir 目录。有关文件名构造的更多详细信息,请参阅 tensorboard.summary.writer.event_file_writer。EventFileWriter 的

例子:

from torch.utils.tensorboard import SummaryWriter

# create a summary writer with automatically generated folder name.
writer = SummaryWriter()
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/

# create a summary writer using the specified folder name.
writer = SummaryWriter("my_experiment")
# folder location: my_experiment

# create a summary writer with comment appended.
writer = SummaryWriter(comment="LR_0.1_BATCH_16")
# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/
add_scalar(标签scalar_valueglobal_step=walltime=new_style=Falsedouble_precision=False[来源]

将标量数据添加到 summary。

参数
  • tagstring) – 数据标识符

  • scalar_valuefloat or string/blobname) – 要保存的值

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

  • new_styleboolean) – 是使用新样式 (张量字段) 还是旧样式 style (simple_value 字段)。新样式可以加快数据加载速度。

例子:

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

预期结果:

_images/add_scalar.png
add_scalars(main_tagtag_scalar_dictglobal_step=walltime=[来源]

将许多标量数据添加到 summary。

参数
  • main_tagstring) – 标签的父名称

  • tag_scalar_dictdict) – 存储标签和相应值的键值对

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

例子:

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

预期结果:

_images/add_scalars.png
add_histogram(标签global_step=bins='tensorflow'walltime=max_bins=无[来源]

将直方图添加到摘要中。

参数
  • tagstring) – 数据标识符

  • torch.Tensornumpy.array string/blobname) – 用于构建直方图的值

  • global_stepint) – 要记录的全局步长值

  • binsstring) – {'tensorflow','auto', 'fd', ...} 之一。这决定了 bin 的制作方式。您可以找到 其他选项: https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

例子:

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

预期结果:

_images/add_histogram.png
add_image(标签img_tensorglobal_step=walltime=dataformats='CHW'[来源]

将图像数据添加到摘要。

请注意,这需要 package.pillow

参数
  • tagstring) – 数据标识符

  • img_tensorTorch。Tensornumpy.array string/blobname) – 图像数据

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

形状:

img_tensor:默认值为(3,H,W)(3, H, W).您可以使用 将一批 Tensor 转换为 3xHxW 格式或调用,让我们完成这项工作。 Tensor 替换为torchvision.utils.make_grid()add_images(1,H,W)(1, H, W),(H,W)(H, W),(H,W,3)(H, W, 3)也适用,只要 传递相应的参数,例如 , , .dataformatsCHWHWCHW

例子:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
img = np.zeros((3, 100, 100))
img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

img_HWC = np.zeros((100, 100, 3))
img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

writer = SummaryWriter()
writer.add_image('my_image', img, 0)

# If you have non-default dimension setting, set the dataformats argument.
writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
writer.close()

预期结果:

_images/add_image.png
add_images(标签img_tensorglobal_step=walltime=dataformats='NCHW'[来源]

将批量图像数据添加到摘要中。

请注意,这需要 package.pillow

参数
  • tagstring) – 数据标识符

  • img_tensorTorch。Tensornumpy.array string/blobname) – 图像数据

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

  • dataformatsstring) – 形式的图像数据格式规范 NCHW、NHWC、CHW、HWC、HW、WH 等。

形状:

img_tensor:默认值为(N,3,H,W)(N, 3, H, W).如果指定,则其他形状将为 接受。例如 NCHW 或 NHWC。dataformats

例子:

from torch.utils.tensorboard import SummaryWriter
import numpy as np

img_batch = np.zeros((16, 3, 100, 100))
for i in range(16):
    img_batch[i, 0] = np.arange(0, 10000).reshape(100, 100) / 10000 / 16 * i
    img_batch[i, 1] = (1 - np.arange(0, 10000).reshape(100, 100) / 10000) / 16 * i

writer = SummaryWriter()
writer.add_images('my_image_batch', img_batch, 0)
writer.close()

预期结果:

_images/add_images.png
add_figure(标签数字global_step=close=Truewalltime=[来源]

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

请注意,这需要 package.matplotlib

参数
  • tagstring) – 数据标识符

  • figurematplotlib.pyplot.figure) – 图形或图形列表

  • global_stepint) – 要记录的全局步长值

  • closebool) – 用于自动关闭图形的标志

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

add_video(标签vid_tensorglobal_step=fps=4walltime=[来源]

将视频数据添加到摘要中。

请注意,这需要 package.moviepy

参数
  • tagstring) – 数据标识符

  • vid_tensorTorch。Tensor) – 视频数据

  • global_stepint) – 要记录的全局步长值

  • fpsfloatint) – 每秒帧数

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

形状:

vid_tensor:(N,T,C,H,W)(N, T, C, H, W).对于 uint8 类型,这些值应位于 [0, 255] 中,对于 float 类型,这些值应位于 [0, 1] 中。

add_audio(标签snd_tensorglobal_step=sample_rate=44100walltime=[来源]

将音频数据添加到摘要中。

参数
  • tagstring) – 数据标识符

  • snd_tensorTorch。Tensor) – 声音数据

  • global_stepint) – 要记录的全局步长值

  • sample_rateint) – 以 Hz 为单位的采样率

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

形状:

snd_tensor:(1,L)(1, L).值应介于 [-1, 1] 之间。

add_text(标签text_stringglobal_step=walltime=[来源]

将文本数据添加到摘要。

参数
  • tagstring) – 数据标识符

  • text_stringstring) – 要保存的字符串

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

例子:

writer.add_text('lstm', 'This is an lstm', 0)
writer.add_text('rnn', 'This is an rnn', 10)
add_graph(modelinput_to_model=Noneverbose=Falseuse_strict_trace=True[来源]

将图形数据添加到摘要。

参数
  • modeltorch.nn.Module) – 要绘制的模型。

  • input_to_modelTorch。Tensortorch 列表。Tensor) - 一个变量或 要馈送的变量。

  • verbosebool) – 是否在控制台中打印图形结构。

  • use_strict_tracebool) – 是否将关键字参数 strict 传递给 torch.jit.trace。如果希望跟踪器执行以下操作,则传递 False 记录你的可变容器类型 (list, dict)

add_embedding(matmetadata=label_img=global_step=tag='default'metadata_header=[来源]

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

参数
  • 子(Torch。Tensornumpy.array) - 每行是数据点的特征向量的矩阵

  • metadatalist) - 标签列表,每个元素将转换为字符串

  • label_imgTorch。Tensor) – 图像对应于每个数据点

  • global_stepint) – 要记录的全局步长值

  • tagstring) – 嵌入的名称

形状:

席:(N,D)(N, D),其中 N 是数据数,D 是特征维度

label_img:(N,C,H,W)(N, C, H, W)

例子:

import keyword
import torch
meta = []
while len(meta)<100:
    meta = meta+keyword.kwlist # get some strings
meta = meta[:100]

for i, v in enumerate(meta):
    meta[i] = v+str(i)

label_img = torch.rand(100, 3, 10, 32)
for i in range(100):
    label_img[i]*=i/100.0

writer.add_embedding(torch.randn(100, 5), metadata=meta, label_img=label_img)
writer.add_embedding(torch.randn(100, 5), label_img=label_img)
writer.add_embedding(torch.randn(100, 5), metadata=meta)
add_pr_curve(标签标签预测global_step=num_thresholds=127weights=walltime=[来源]

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

参数
  • tagstring) – 数据标识符

  • 标签torch.Tensornumpy.array string/blobname) – 真值数据。每个元素的二进制标签。

  • 预测TORCH.Tensornumpy.array string/blobname) – 元素被分类为 true 的概率。 值应在 [0, 1] 中

  • global_stepint) – 要记录的全局步长值

  • num_thresholdsint) – 用于绘制曲线的阈值数。

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

例子:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
labels = np.random.randint(2, size=100)  # binary label
predictions = np.random.rand(100)
writer = SummaryWriter()
writer.add_pr_curve('pr_curve', labels, predictions, 0)
writer.close()
add_custom_scalars(布局[来源]

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

参数

- layoutdict) - {categoryName: charts},其中 charts 也是一个字典 {chartName: ListOfProperties} 中。ListOfProperties 中的第一个元素是图表的类型 (MultilineMargin 之一),第二个元素应该是包含标签的列表 您已在 add_scalar 函数中使用,该函数将被收集到新图表中。

例子:

layout = {'Taiwan':{'twse':['Multiline',['twse/0050', 'twse/2330']]},
             'USA':{ 'dow':['Margin',   ['dow/aaa', 'dow/bbb', 'dow/ccc']],
                  'nasdaq':['Margin',   ['nasdaq/aaa', 'nasdaq/bbb', 'nasdaq/ccc']]}}

writer.add_custom_scalars(layout)
add_mesh(标签顶点颜色==config_dict=global_step=walltime=None[来源]

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

参数
  • tagstring) – 数据标识符

  • 顶点torch.Tensor) - 顶点的 3D 坐标列表。

  • 颜色Torch。Tensor) – 每个顶点的颜色

  • Torch.Tensor) – 每个三角形内顶点的索引。(可选)

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

  • global_stepint) – 要记录的全局步长值

  • walltimefloat) – 可选覆盖默认 walltime (time.time()) 事件纪元后的秒数

形状:

顶点:(B,N,3)(B, N, 3).(批处理、number_of_vertices、通道)

颜色:(B,N,3)(B, N, 3).对于 uint8 类型,这些值应位于 [0, 255] 中,对于 float 类型,这些值应位于 [0, 1] 中。

面临:(B,N,3)(B, N, 3).对于 uint8 类型,值应位于 [0, number_of_vertices] 中。

例子:

from torch.utils.tensorboard import SummaryWriter
vertices_tensor = torch.as_tensor([
    [1, 1, 1],
    [-1, -1, 1],
    [1, -1, -1],
    [-1, 1, -1],
], dtype=torch.float).unsqueeze(0)
colors_tensor = torch.as_tensor([
    [255, 0, 0],
    [0, 255, 0],
    [0, 0, 255],
    [255, 0, 255],
], dtype=torch.int).unsqueeze(0)
faces_tensor = torch.as_tensor([
    [0, 2, 3],
    [0, 3, 1],
    [0, 1, 2],
    [1, 3, 2],
], dtype=torch.int).unsqueeze(0)

writer = SummaryWriter()
writer.add_mesh('my_mesh', vertices=vertices_tensor, colors=colors_tensor, faces=faces_tensor)

writer.close()
add_hparams(hparam_dictmetric_dicthparam_domain_discrete=run_name=[来源]

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

参数
  • hparam_dictdict) – 字典中的每个键值对都是 name (名称) 及其对应的值。 值的类型可以是 boolstringfloatintNone 之一。

  • metric_dictdict) – 字典中的每个键值对都是 指标的名称及其相应的值。请注意,使用的密钥 此处在 TensorBoard 记录中应是唯一的。否则,值 您添加的 BY 将显示在 HPARAM 插件中。在大多数 的情况下,这是不需要的。add_scalar

  • hparam_domain_discrete – (Optional[Dict[str, List[Any]]]) 一个字典,其中 包含超参数的名称以及它们可以保存的所有离散值

  • run_namestr) – 要作为 logdir 的一部分包含的运行的名称。 如果未指定,将使用当前时间戳。

例子:

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

预期结果:

_images/add_hparam.png
flush()[来源]

将事件文件刷新到磁盘。 调用此方法以确保所有待处理事件都已写入 磁盘。

close()[来源]

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源