Tensorboard 及 TensorboardX 的安装与使用
Tensorboard 用来干什么?
- Tensorboard 是 tensorflow 内置的一个可视化工具
- Tensorboard 的可视化依赖于 tensorflow 程序运行输出的日志文件,因而 tensorboard 和 tensorflow 程序在不同的进程中运行
如何安装并开启 Tensorboard 服务?
- pip 安装
1
2python -m pip install tensorboard
tensorboard --logdir=2017_05_03_00_12
Tensorboard、TensorboardX 与 torch.utils.tensorboard 的关系?
- Tensorboard 是 Tensorflow 用于检查和理解模型及训练情况的 Web 应用
1
from tensorboard import SummaryWriter
- 在 Pytorch 发布的早期,没有支持 tensorboard 强大的数字可视化工具,由 lanpa (Github 用户名) 开发出 TensorboardX,可认为是 Tensorboard 库的第三方改编版
1
from tensorboardX import SummaryWriter
- PyTorch1.10 后,官方支持 tensorboard 功能,导入 torch. utils. tensorboard 进行使用,注意:使用之前必须先安装 tensorboard 包
1
from torch.utils.tensorboard import SummaryWriter
- TensorboardX 与 torch.utils.tensorboard 大多数代码是相同的,除了 torch.utils.tensorboard 在 logging 时依赖于 tensorboard。另一个区别是 tensorboardX 支持其他框架,例如 chainer,而 torch.utils.tensorboard 更特定于 pytorch
如何安装 tensorBoardX?
- pip 安装
1
pip install tensorboardX
- 源码安装
1
pip install 'git+https://github.com/lanpa/tensorboardX'
- 安装加速包
1
pip install crc32c
- 安装音频加速包
1
pip install soundfile
TensorboardX 有哪些功能?
- scalar 标量仪表板
- image 图像仪表板
- figure matplotlib 图形渲染为图像可视化
- histogram 直方图仪表板
- audio 音频仪表板
- text 文本仪表板
- graph 图形数据(模型)
- embedding 可视化高维数据
- pr_curve 添加精确召回曲线
- mesh 添加网格或 3D 点云
- hyper-parameters 超参数
- video 视频数据仪表板
torch.utils.tensorboard 使用例子?
- 训练 mnist_train 数据,并可视化训练数据与模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import 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 查看训练数据
- 运行 tensorboard 查看训练模型
认识 torch.utils.tensorboard 中 SummaryWriter 类 ?
- 该类是记录数据以供 TensorBoard 使用和可视化的主要入口
- 该类提供了一个高层次的 API 来创建指定目录的事件文件,并添加摘要和事件给它
- 该类支持异步更新文件内容
- 允许训练程序直接从训练循环调用方法将数据添加到文件中,而不会减慢训练速度
torch.utils.tensorboard 中 SummaryWriter 类 的初始化?
- 参数
- log_dir (string) – 保存目录位置。默认为 runs/ CURRENT_DATETIME_HOSTNAME,每次运行后都会更改。使用分层文件夹结构轻松比较运行。例如,为每个新实验传入 ‘runs/exp1’、‘runs/exp2’ 等以在它们之间进行比较。
- comment (string) – 附加到默认值的注释 log_dir 后缀 log_dir。如果 log_dir 已分配,则此参数无效。
- purge_step (int) – 当日志在步骤崩溃时 T+X 吨 + X 并在步骤重新启动 吨吨,global_step 大于或等于的任何事件 吨吨将从 TensorBoard 中清除和隐藏。请注意,崩溃和恢复的实验应该具有相同的 log_dir.
- max_queue (int) – 在 “添加” 调用之一强制刷新到磁盘之前,挂起事件和摘要的队列大小。默认为十项。
- flush_secs (int) – 将挂起的事件和摘要刷新到磁盘的频率(以秒为单位)。默认为每两分钟。
- filename_suffix (string) – 添加到 log_dir 目录中所有事件文件名的后缀。有关 tensorboard.summary.writer.event_file_writer.Even
- 例子
1
2
3
4
5
6
7
8
9
10from torch.utils.tensorboard import SummaryWriter
# 使用自动创建的文件夹初始化一个SummaryWriter
writer = SummaryWriter()
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/
# 使用手动创建的文件夹初始化一个SummaryWriter
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/
torch.utils.tensorboard 的使用?
- add_scalar
- 将标量数据添加到汇总中
- 参数
- tag (string) – 数据标识符
- scalar_value (float 或 string/blobname) – 要保存的值
- global_step (int) – 要记录的全局步长值
- walltime (float) – 可选覆盖默认 walltime (time.time ()) 与事件纪元后的秒数
- new_style (boolean) – 是使用新样式(张量字段)还是旧样式(simple_value 字段)。新样式可能会导致更快的数据加载。
- 例子
1
2
3
4
5
6from torch.utils.tensorboard import SummaryWriter
import numpy as np
write=SummaryWriter()
for i in range(100):
write.add_scalar("randomvalue",np.random.randint(0,100),i)
write.close() - 结果
- add_scalars
- 添加一组标量
- 参数
- tag (string) – 数据标识符
- scalar_value (float 或 string/blobname) – 要保存的值
- global_step (int) – 要记录的全局步长值
- walltime (float) – 可选覆盖默认 walltime (time.time ()) 与事件纪元后的秒数
- 例子
1
2
3
4
5write=SummaryWriter()
r = 5
for i in range(100):
write.add_scalars("run_14h",{"xsinx":i*np.sin(i/r),"xcosx":i*np.cos(i/r),"tanx":np.tan(i/r)},i)
write.close() - 结果
- add_histogram
- 添加直方图
- 参数
- tag (string) – 数据标识符
- 值(torch.Tensor、numpy.array 或 string/blobname)– 构建直方图的值
- global_step (int) – 要记录的全局步长值
- bins (string) – {‘tensorflow’,‘auto’, ‘fd’, …} 之一。这决定了垃圾箱的制作方式。您可以在以下位置找到其他选项:
- walltime (float) – 事件纪元后可选的覆盖默认 walltime (time.time ()) 秒
- 例子
1
2
3
4
5
6
7
8
9write=SummaryWriter()
x=np.random.random(1000)
write.add_histogram("demo_histogram01",x,0)
write.close()
write=SummaryWriter()
for i in range(10):
x=np.random.random(1000)
write.add_histogram("demo_histogram02",x+i,i)
write.close() - 结果
- add_image
- 添加图像数据到摘要中
- 参数
- tag (string) – 数据标识符
- img_tensor (torch.Tensor , numpy.array , or string/blobname) – 图像数据
- global_step (int) – 要记录的全局步长值
- walltime (float) – 事件纪元后可选的覆盖默认 walltime (time.time ()) 秒
- dataformat (str)- 数据格式,默认 “CHW”,可使用函数 torchvision.utils.make_grid () 转换 1 个 batch 的 image
- 例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import torchvision
import torch
write=SummaryWriter()
# CHW格式
imgCHW=np.zeros((3,100,100))
imgCHW[0]=np.arange(0,10000).reshape((100,100))/10000
imgCHW[1]=1-np.arange(0,10000).reshape((100,100))/10000
# HWC格式
imgHWC=np.zeros((100,100,3))
imgHWC[...,0]=np.arange(0,10000).reshape((100,100))/10000
imgHWC[...,1]=1-np.arange(0,10000).reshape((100,100))/10000
# 批量的CHW格式
imgNCHW=[]
imgNCHW.append(torch.tensor(imgCHW))
imgNCHW.append(torch.tensor(imgCHW))
grid = torchvision.utils.make_grid(imgNCHW)
write.add_image("image_CHW",img,1)
write.add_image("image_HWC",imgHWC,1,dataformats="HWC")
write.add_image("image_NHWC",grid,1)
write.close() - 结果
- add_images
- 参数
- tag (string) – 数据标识符
- img_tensor (torch.Tensor , numpy.array , or string/blobname) – 图像数据
- global_step (int) – 要记录的全局步长值
- walltime (float) – 事件纪元后可选的覆盖默认 walltime (time.time ()) 秒
- dataformat (str)- 数据格式,默认 “CHW”,可使用函数 torchvision.utils.make_grid () 转换 1 个 batch 的 image
- 例子
1
2
3
4
5
6
7
8writer=SummaryWriter()
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
print(img_batch.shape)
writer.add_images('my_image_batch', img_batch, 0)
writer.close() - 结果
- 参数
- figure
- matplotlib 图形渲染为图像可视化
- histogram
- 直方图仪表板
- audio
- 音频仪表板
- text
- 文本仪表板
- graph
- 图形数据(模型)
- embedding
- 可视化高维数据
- pr_curve
- 添加精确召回曲线
- mesh
- 添加网格或 3D 点云
- hyper-parameters
- 超参数
- video
- 视频数据仪表板