PyTorch 中 TensorBoard 可视化模块应用
简介
Tensorboard 原本是 tensorflow 的可视化工具,pytorch 从1.2.0开始支持tensorboard。之前的版本也可以使用tensorboardX 代替。它在 PyTorch 中的模块为 torch.utils.tensorboard
。
使用 tensorboard,我们可以在 TensorBoard UI 的框架内把 PyTorch 的模型和数据记录到文件夹内。
支持的可视化有:标量,图片,直方图,图表,嵌入,Caffe 2 nets 和 blobs。
Scalars, images, histograms, graphs, and embedding visualizations are all supported for PyTorch models and tensors as well as Caffe2 nets and blobs.
Tensorboard 的工作流程为:
- 将代码运行过程中的数据写入一个文件夹中。(由代码中的 SummaryWriter 完成)
- 读取这个文件夹中的数据,用浏览器显示出来。(在命令行运行 tensorboard 完成)
接下来将分别介绍 SummaryWriter 和命令行 tensorboard 的使用方法。
SummaryWriter
一个简单实例:
1 |
|
可以看到,首先创建 SummaryWriter
的实例来对写入文件夹等等进行总体控制,然后再通过实例写入。SummaryWriter
的初始化参数如下:
log_dir
(string) - 保存目录位置。默认为runs/CURRENT_DATETIME_HOSTNAME
,因为每次运行的时间都会改变,所以每次都会写入新文件夹。平常使用时可以使用层级结构,如runs/exp1
,runs/exp2
,方便对实验进行比较。purge_step
(int) - 当 log 在 $T+X$ 步崩溃导致意外终止,然后在 $T$ 步重启时,可以指定purge_step
。大于等于 $T$ 步的数据会在 TensorBoard 里被清除然后隐藏。注意重启的实验和崩溃的实验应该指定同一log_dir
文件目录。
命令行 tensorboard 可视化
常用的命令就两个参数 --logdir
和 --port
。
logdir
:需要可视化的目录位置。port
:tensorboard 可视化显示的 localhost 端口。
示例:
1 |
|
写数据方法
就像在 SummaryWriter
中展示的,tensorboard 通过 SummaryWriter
的各种方法来向目录文件中写入数据,除了 add_scalar
方法外,还有许多方法,本节将一一进行介绍。
add_scalar
将标量数据添加到 summary。
add_scalar(tag, scalar_value, global_step=None)
- tag:数据 ID。
- scalar_value:需要存储的值。
- global_step:全局的步骤数。
实例:
1 |
|
add_scalars
批量添加标量数据到 summary。
add_scalars(main_tag, tag_scalar_dict, global_step=None)
- main_tag:所有 tag 的主标签。
- tag_scalar_dict:存储的标签和值的键值对。
- global_step:全局的步骤数。
实例:
1 |
|
注意,该方法存储时不是将 xsinx, xcosx, tanx 存储在 run_14h 这个 section 下,而是在主文件夹下将三个值存入 run_14h_xsinx, run_14h_xcosx, run_14h_tanx 文件夹。
如果想存储在一个 section 下,还是使用 add_scalar 方法,如:
1 |
|
add_histogram
将直方图添加到 summary。
add_histogram(tag, values, global_step)
- tag:数据 ID。
- values:建立直方图的值。(type 为
torch.Tensor
或者numpy.array
) - global_step:全局的步骤数。
实例:
1 |
|
add_image
将图片信息添加到 summary。注意需要安装 pillow
包。
add_image(tag, img_tensor, global_step=None, dataformats=’CHW’)
tag:数据 ID。
img_tensor:图片数据。
global_step:全局的步骤数。
dataformats:数据格式,如
CHW
,HWC
,HW
。H
为高,W
为宽,C
为通道数。
Shape:
img_tensor
默认为 $(3, H,W)$。可以使用 torchvision.utils.make_grid()
把一个 batch
的 tensor
转换成 $3\times H\times W$ 的格式。如果 img_tensor
为其他格式,需要更改 dataformats
为对应的格式。
实例:
1 |
|
add_images
将一个 batch 的图片数据添加到 summary。注意需要安装 pillow
包。
add_images(tag, img_tensor, global_step=None, dataformats=’NCHW’)
tag:数据 ID。
img_tensor:图片数据。
global_step:全局的步骤数。
dataformats:数据格式,如
NCHW
,NHWC
,CHW
。H
为高,W
为宽,C
为通道数。
Shape:
img_tensor
默认为 $(N,3, H,W)$。如果 img_tensor
为其他格式,需要更改 dataformats
为对应的格式。
实例:
1 |
|
add_figure
将 matplotlib figure 渲染成图片并把它添加到 summary。注意需要安装 matplotlib
包。
add_figure(tag, figure, global_step=None, close=True)
- tag:数据 ID。
- figure:figure 或者 figure 列表。
- global_step:全局的步骤数。
add_graph
将图数据添加到 summary。
add_graph(model, input_to_model=None, verbose=False)
- model (torch.nn.Module):要画的模型。
- input_to_model:输入变量。(
torch.Tensor
或者torch.Tensor
的list
) - verbose:是否把图结构输入到控制台。(没啥用, 输出的结果看不懂)
add_hparms
将一组超参数数据添加到 TensorBoard。
add_hparams(hparam_dict, metric_dict, run_name)
hparam_dict:字典中每个键值对,超参数和它对应的值。
metric_dcit:字典中每个 metric 和它对应的值。注意这里使用的值应该是 tensorboard 记录里唯一的值。(unique)
run_name:这次 run 的名称,会被包含在
logdir
文件夹下。如果 run_name 未被指定,则默认会使用当前时间戳。
实例:
1 |
|
数据读取
1 |
|
输出:
1 |
|