TensorBoardX教程(1)

TensorBoardX教程(1)

TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括:

  • 可视化模型的网络架构
  • 跟踪模型指标,如损失和准确性等
  • 检查机器学习工作流程中权重、偏差和其他组件的直方图
  • 显示非表格数据,包括图像、文本和音频
  • 将高维嵌入投影到低维空间

TensorBoardX的使用:

Tensorboard的使用类似于matplotlib,先创立一个事件文件对象,再将各种文件写入Tensorboard中进行后续显示

SummaryWriter 是 TensorFlow 的一个类,用于将事件(如张量摘要、图像、音频、视频等)写入到一个事件文件中,以便后续使用 TensorBoard 进行可视化

创建 SummaryWriter 实例时,你需要指定一个日志目录,TensorBoard 将在这个目录中创建事件文件。以下是创建和使用 SummaryWriter 的基本步骤:

创建 SummaryWriter 实例

1
2
from tensorboardX import SummaryWriter
writer = SummaryWriter('logs/') # 指定日志目录

使用 SummaryWriter 方法记录数据

  • add_scalar:添加标量数据点
  • add_histogram:添加直方图数据
  • add_image:添加图像数据
  • add_audio:添加音频数据
  • add_video:添加视频数据
  • add_graph:添加模型的图结构
  • add_meta_graph:添加带有元数据的图结构
  • add_session_log:添加会话日志信息

关闭 SummaryWriter

​ 在记录完所有数据后,应该关闭 SummaryWriter 实例以确保所有数据都被刷新到磁盘:

1
writer.close()

启动TensorBoard:

​ 在命令行内输入tensorboard --logdir runs,命令解析:

  • tensorboard:这是启动 TensorBoard 的命令。
  • --logdir:这是一个参数,用于指定 TensorBoard 应该从哪个目录读取日志文件。TensorBoard 需要日志文件来展示训练过程中的各种指标,如损失、准确度等。
  • runs:这是 --logdir 参数的值,表示 TensorBoard 将会在当前目录下的 runs 文件夹中查找日志文件。通常,这个文件夹包含了不同训练会话的日志,每个会话可能有自己的子文件夹。

现在有更方便的启动TensorBoard用法:vscode和Pycharm里面的插件,直接点就行了

函数用法解析:

.add_scalar解析:

用于将单个标量值添加到 TensorBoard 日志的方法

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

参数解释:

  • tag:一个字符串,用于标识数据点的名称。通常,tag 应该包含一个描述性的名称,如 'Loss/train''Accuracy/train'
  • value:要记录的标量值。可以是整数、浮点数或其他可转换为浮点数的类型
  • global_step(可选):一个整数,表示当前的训练步骤。如果提供了 global_step,TensorBoard 会将数据点按照步骤顺序显示。如果未提供,可以使用 walltime 参数
  • walltime(可选):一个浮点数,表示当前时间的时间戳(以秒为单位)。如果同时提供了 global_stepwalltime,TensorBoard 会使用这两个参数来确定数据点的位置

.add_scalars解析:

用于将多个标量值添加到 TensorBoard 日志的方法

1
SummaryWriter.add_scalars(tag, scalar_dict, global_step=None, walltime=None)

参数解释:

  • scalar_dict:一个字典,**其键是每个标量的名称,值是相应的标量值。**这些名称将作为 tag 的子前缀
  • 其它的参数说明同前面

.add_histogram解析:

用于将直方图数据添加到 TensorBoard 日志的方法

1
SummaryWriter.add_histogram(tag, values, global_step=None, walltime=None, max_bins=None)

参数解释:

  • values:一个的 torch.Tensornumpy 数组,表示要记录的直方图数据
  • max_bins(可选):一个整数,指定直方图中的最大桶(bin)数。默认情况下,TensorBoard 会根据数据范围自动选择桶数

histogram示意图

​ 这张图就是对模型某一个卷积核数据分布状况的直方图可视化,不同的层代表着不同的epoch下卷积核的不同分布(叠在一起了)

.add_image解析:

用于将图像数据添加到 TensorBoard 日志的方法。这个方法允许你记录和可视化图像数据,例如模型输入、特征图、分割掩码等

1
SummaryWriter.add_image(tag, img_tensor, global_step=None, walltime=None, max_images=1)

参数解释:

  • img_tensor:一个四维的 torch.Tensor,表示要记录的图像数据。图像张量的形状应该是 [batch_size, channels, height, width],其中 channels 是图像的通道数(例如,对于 RGB 图像,channels 应该是 3)。
  • max_images(可选):一个整数,指定在 TensorBoard 中显示的最大图像数量。默认为 1

注:该函数与torchvision.utils.make_grid 同时使用会十分方便

1
2
3
4
5
6
7
8
9
10
import torchvision.utils as vutils
import torch

# 假设我们有一个批次的图像张量
images = torch.randn(16, 3, 64, 64) # 16张 64x64 的 RGB 图像
# 使用 make_grid 函数创建一个网格图像
grid = vutils.make_grid(images, nrow=4, padding=5, normalize=True)
# 打印网格图像的形状
print(grid.shape) # 输出: torch.Size([256, 256, 3])
# 可以使用 tensorboard 的 add_image 方法来记录网格图像

.add_graph解析:

1
SummaryWriter.add_graph(model, input_to_model=None)

参数解释:

  • model:模型实例
  • input_to_model(可选):模型的输入数据,可以生成一个随机数,只要shape符合要求即可

其它的函数的用处就没那么广了,如果需要使用自行查阅官方文档