torch.utils.tensorboard

译者:shuziP

校验:shuziP

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

一旦你安装TensorBoard,这些工具让您登录PyTorch模型和指标纳入了TensorBoard UI中的可视化的目录。标量,图像,柱状图,曲线图,和嵌入可视化都支持PyTorch模型和张量以及Caffe2网和斑点。

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可视化,这应该是安装和运行的有:

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

一次实验可以记录很多信息。为了避免混乱的UI,并有更好的聚类的结果,我们可以通过分层命名来对图进行分组。例如,“Loss/train”和“Loss/test”将被分组在一起,而“Accuracy/train”和“Accuracy/test”将分别在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

classtorch.utils.tensorboard.writer.``SummaryWriter( log_dir=None , comment=’’ , purge_step=None , max_queue=10 , flush_secs=120 , filename_suffix=’’ )[source]

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

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

__init__( log_dir=None , comment=’’ , purge_step=None , max_queue=10 , flush_secs=120 , filename_suffix=’’ )[source]

创建 SummaryWriter 将写出事件和摘要的事件文件。

Parameters

  • log_dir (string) - 保存目录位置。缺省值是运行/ CURRENT_DATETIME_HOSTNAME ,在每次运行后,其改变。采用分层文件夹结构容易运行之间的比较。例如通过在 ‘runs/exp1’, ‘runs/exp2’等,对每一个新实验进行比较。
    • comment (string) - 添加到默认log_dir后缀的注释log_dir。如果分配了log_dir,则此参数无效
    • purge_step (int) -当日志记录在步骤T+XT+X崩溃并在步骤TT重新启动时,global_step大于或等于TT的任何事件将被清除并从TensorBoard中隐藏。注意,崩溃和恢复的实验应该具有相同的log_dir。
    • max_queue (int) - 在其中一个“add”调用强制刷新到磁盘之前,挂起事件和摘要的队列大小。默认为10项。
    • flush_secs (int) - 将事件挂起和将摘要刷新到磁盘的频率(秒)。默认值是每两分钟一次。
    • filename_suffix (string) - 添加到日志目录中所有事件文件名的后缀。在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/

add_scalar( tag , scalar_value , global_step=None , walltime=None )[source]

标量数据添加到汇总。

Parameters

  • tag (string) - 数据标识符
    • scalar_value (float or string/blobname) - 值保存
    • global_step (int) –- 记录的全局步长值
    • walltime (float) – 可选覆盖默认的walltime (time.time()),在事件一轮后的几秒内覆盖

Examples:


​ 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()

Expected result:

_images/add_scalar.png

add_scalars( main_tag , tag_scalar_dict , global_step=None , walltime=None )[source]

向摘要添加许多标量数据。

注意,此函数还将记录标量保存在内存中。在极端情况下,它会让你的内存爆满。

Parameters

  • main_tag (string) – 标记的父名称
    • tag_scalar_dict (dict) – 存储标记和相应值的键值对
    • global_step (int) – 要记录的全局步骤值
    • walltime (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

add_histogram( tag , values , global_step=None , bins=’tensorflow’ , walltime=None , max_bins=None )[source]

添加柱状图总结。

Parameters

  • tag (string) – 数据标识符

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

add_image( tag , img_tensor , global_step=None , walltime=None , dataformats=’CHW’ )[source]

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

请注意,这需要 pillow 包装。

Parameters

  • tag ( string ) – Data identifier

  • img_tensor ( torch.Tensor numpy.array 串/ blobname ) - 图像数据

  • global_step ( int) – Global step value to record

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

Shape:

img_tensor:默认值为(3,H,W) (3,H,W)。您可以使用 torchvision.utils.make_grid() 将一批张量转换成3xHxW格式,或者调用 add_images ,让我们来完成这项工作。(1,H,W) (1,H,W) (H,W) (H,W) (H,W) (H,W) (H,W,3) (H,W,3)张量也是可以的,只要传递了相应的 dataformats 参数。例如: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

add_images( tag , img_tensor , global_step=None , walltime=None , dataformats=’NCHW’ )[source]

成批的图像数据添加到汇总。

Note that this requires the pillowpackage.

请注意,这需要pillowpackage。

Parameters

  • tag ( string ) – Data identifier

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

  • global_step ( int) – Global step value to record

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

  • dataformats ( ) - 形式的NCHW,NHWC,CHW,HWC,HW,WH等的图像数据格式规范

Shape:

img_tensor:默认为 (N , 3 , H , W ) (N,3,H,W) (N , 3 , H , W ) 。如果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

add_figure( tag , figure , global_step=None , close=True , walltime=None )[source]

渲染matplotlib图成图像并将其添加到汇总。

注意,这需要的matplotlib包。

Parameters

  • tag ( string ) – Data identifier

  • [HTG0图 (matplotlib.pyplot.figure ) - 图或数字的列表

  • global_step ( int) – Global step value to record

  • 关闭 ( 布尔 ) - 标志自动关闭该图

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

add_video( tag , vid_tensor , global_step=None , fps=4 , walltime=None )[source]

视频数据添加到汇总。

注意,这需要的moviepy包。

Parameters

  • tag (string) – Data identifier
    • vid_tensor (torch.Tensor) – Video data
    • global_step (int) – Global step value to record
    • fps (float or int) – Frames per second
    • walltime (float) – Optional override default walltime (time.time()) seconds after epoch of event

Shape:

vid_tensor: (N , T , C , H , W ) (N,T,C,H,W) (N , T , C , H , W ) 。的值应该位于[0,255]为式 UINT8 或[0,1]类型浮动。

add_audio( tag , snd_tensor , global_step=None , sample_rate=44100 , walltime=None )[source]

音频数据添加到汇总。

Parameters

  • tag ( string ) – Data identifier

  • snd_tensor ( torch.Tensor ) - 声音数据

  • global_step ( int) – Global step value to record

  • SAMPLE_RATE ( INT ) - 以Hz采样率

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

Shape:

snd_tensor: (1 , L ) (1,L) (1 , L ) 。值应该[-1,1]之间。

add_text( tag , text_string , global_step=None , walltime=None )[source]

文本数据添加到汇总。

Parameters

  • tag ( string ) – Data identifier

  • text_string的 ( ) - 字符串,以节省

  • global_step ( int) – Global step value to record

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

Examples:


​ writer.add_text(‘lstm’, ‘This is an lstm’, 0) ​ writer.add_text(‘rnn’, ‘This is an rnn’, 10)

add_graph( model , input_to_model=None , verbose=False )[source]

图数据添加到汇总。

Parameters

  • 模型 ( torch.nn.Module ) - 模型绘制。

  • input_to_model ( torch.Tensor torch.Tensor 的列表中) - 的变量或变量的元组被输送。

  • 冗长 ( 布尔 ) - 是否打印图形结构在控制台。

add_embedding( mat , metadata=None , label_img=None , global_step=None , tag=’default’ , metadata_header=None )[source]

添加投影数据嵌入到总结。

Parameters

  • ( torch.Tensor numpy.array ) - 甲矩阵,每一行都是特征向量数据点

  • 元数据 ( 列表 ) - 标签的列表,每个元件将转换为串

  • label_img ( torch.Tensor ) - 图像对应于每个数据点

  • global_step ( int) – Global step value to record

  • 标记 ( ) - 名称为嵌入

Shape:

垫: (N , d ) (N,d) (N , d ) ,其中N是数据的数和d是特征尺寸

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

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)

add_pr_curve( tag , labels , predictions , global_step=None , num_thresholds=127 , weights=None , walltime=None )[source]

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

Parameters

  • tag (string) –– Data identifier

  • labels (torch.Tensor, numpy.array\*, or string/blobname*) – 地面实测数据。每个元素的二进制标签。

  • predictions (torch.Tensor, numpy.array\*, or string/blobname*) – 该元素被分类为真概率。值应在[0,1]

  • global_step ( int) – Global step value to record

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

  • walltime ( 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()

add_custom_scalars( layout)[source]

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

Parameters

layout (dict) - {categoryName: charts},其中charts也是一个字典{chartName: ListOfProperties}。ListOfProperties中的第一个元素是图表的类型(多行或空白中的一个),第二个元素应该是包含add_scalar函数中使用的标记的列表,这些标记将被收集到新图表中。

Examples:


​ 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( tag , vertices , colors=None , faces=None , config_dict=None , global_step=None , walltime=None )[source]

将网格或三维点云添加到TensorBoard。可视化基于three.js,因此它允许用户与呈现的对象交互。除了顶点、面等基本定义外,用户还可以进一步提供相机参数、照明条件等,高级使用请查看https://threejs.org/docs/index.html manual/en/introduction/creating-a-scene。

Parameters

  • tag ( string ) – Data identifier

  • 顶点 ( torch.Tensor ) - 三维坐标列表的顶点。

  • 颜色 ( torch.Tensor ) - 为每个顶点的色彩

  • ( torch.Tensor ) - 每个三角形内的顶点指数。 (可选的)

  • config_dict - 字典与ThreeJS类的名称和结构。

  • global_step ( int) – Global step value to record

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

Shape:

vertices: (B, N, 3) (B , N , 3 ) (B,N,3) (B , N , 3 ) 。 (分批,number_of_vertices,通道)

colors: (B, N, 3) (B , N , 3 ) (B,N,3) (B , N , 3 ) 。的值应该位于[0,255]为式 UINT8 或[0,1]类型浮动。

faces: (B, N, 3) (B , N , 3 ) (B,N,3) (B , N , 3 ) 。的值应该位于[0,number_of_vertices]为式 UINT8 。

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()

flush()[source]

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

close()[source]