TensorBoard 的介绍
TensorBoard是一个可视化工具,用于展示和理解TensorFlow运行时的计算图、数据分布以及训练过程中的各种指标。通过TensorBoard,用户可以直观地看到模型的训练过程、数据的流动以及各种统计信息,从而更好地调试和优化模型。
主要功能包括可视化模型的网络架构、跟踪模型指标(如损失和准确性等)、检查机器学习工作流程中权重、偏差和其他组件的直方图、显示非表格数据(包括图像、文本和音频)以及将高维嵌入投影到低维空间。
1. TensorBoard 的安装
如果 没有安装 tensorboad,可以通过 pip 安装
pip install tensorflow
pip install tensorboard
2. TensorBoard 的导入
from torch.utils.tensorboard import SummaryWriter
3. TensorBoard 的使用
SummaryWriter是PyTorch中用于与TensorBoard集成的类,它允许开发者在训练过程中记录标量、直方图、图像等多种类型的数据。
-
记录标量:使用
add_scalars()
方法记录训练过程中的标量数据,如损失值、准确率等,这些数据可以在TensorBoard中以折线图的形式展示,帮助分析训练过程中的性能变化。 -
统计直方图:通过
add_histogram()
方法记录权重的直方图分布,这在分析模型权重分布和训练稳定性方面非常有用。 -
批次显示图像:
使用 add_image( )
方法允许开发者在TensorBoard中显示训练过程中的图像,这对于可视化模型在特定迭代或epoch中的输出非常有用。 -
关闭SummaryWriter:在训练完成后,应使用
close()
方法关闭SummaryWriter,以确保所有数据都被正确写入日志文件。
writer = SummaryWriter("logs") # "logs" 生成日志文件的路径
示例:
-
add_scalar(tag, scalar_value, global_step=None, walltime=None)
tag
:字符串类型,用于标识这个标量数据的名称,也就是自定义表达式名,例如 "train_loss" 或 "validation_accuracy"。scalar_value
:表示要记录的标量值,例如训练或验证过程中的损失值或准确率。global_step
:一个可选参数,表示全局步骤数,通常用于表示训练过程中的迭代次数。如果在多次调用add_scalar
时保持tag
不变而改变global_step
的值,TensorBoard会将这些点连接起来,形成一条曲线,从而可以观察标量值如何随全局步骤数的变化而变化。walltime
:另一个可选参数,表示记录该标量值的时间戳,通常不需要用户指定,TensorBoard会自动记录当前时间。
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
for i in range(100):
writer.add_scalar("y=z",i,i)
writer.close()
在 所生成的 文件处使用 tensorboard --logdir=logs 打开 本地服务器,查看输出结果
示例:
TensorBoard的
add_image()
函数用于在TensorBoard中显示图像数据,其参数包括:
tag
:字符串类型,用于标识图像的数据标签。img_tensor
:必须是torch.Tensor, numpy.ndarray, or string/blobname 类型,表示要显示的图像数据。global_step
:(可选)整数类型,表示训练的步骤。walltime
:(可选)表示记录图像的时间戳。dataformats
:(可选)字符串类型,默认值为'CHW',表示图像数据的格式,如果图像的通道数在后面,比如(h,w,3)这种形式的话需要修改此参数。使用
add_image()
函数的基本步骤如下:
- 首先,需要获取图像的地址,并使用适当的库(如PIL或OpenCV)打开图像。
- 如果图像数据不是
torch.Tensor
或numpy.array
类型,需要进行转换。例如,如果图像是以PIL格式打开的,可以使用numpy.array()
函数将其转换为numpy
数组。- 创建
SummaryWriter
对象,并使用add_image()
方法将图像数据添加到TensorBoard日志中。
注意要点:1. 通过 PIL 打开的图像,其类型是:<class 'PIL.JpegImagePlugin.JpegImageFile'>,需要将其通过 numpy 或者 open CV 转换为 :
torch.Tensor
或numpy.array
类型,才可以使用。2. tag 不同,可以展示出不同的图像
3. 在转换图像之后,通过 下述查看图像类型
print(img_array.shape) # 查看图像的类型
4. dataformats: 默认的是(3,h,w)3个通道,h高度,w宽度。如果通道数在后面,比如(h,w,3)这种形式的话需要修改参数dataformats:CHW,HWC
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
img_path = '../小土堆/hymenoptera_data/train/ants_img/148715752_302c84f5a4.jpg' # 获取图片的地址
img_PIL = Image.open(img_path) # 打开该图片, 图片属于PIL型
img_array = np.array(img_PIL) # 将PIL型图片使用numpy转换为numpy型
print(img_array.shape) # 查看图像的类型
writer = SummaryWriter('logs') # 创建SummaryWriter对象
writer.add_image('tww', img_array, 2, dataformats="HWC") # 将图像添加到TensorBoard日志中
writer.close() # 关闭writer对象