TensorBoard是用于可视化和调试机器学习模型的工具。它可以帮助跟踪训练过程中的各种指标,例如损失值、准确率等,并查看模型的结构和参数分布。TensorBoard由Google开发,最初用于TensorFlow框架,现在也支持PyTorch。
一、TensorBoard的主要功能
1.1 可视化训练过程
TensorBoard可以绘制各种指标的曲线图,直观地观察训练过程中的变化趋势。例, 可以绘制损失值曲线图来判断模型是否过拟合或欠拟合,或者绘制准确率曲线图来评估模型的性能。
1.2 查看模型结构
TensorBoard可以显示模型的计算图,理解模型的架构和各个部分之间的连接关系。这对于调试模型和分析模型行为非常有用。
1.3 分析参数分布
TensorBoard可以显示模型参数的分布直方图,了解模型参数的取值范围和分布情况。这对于调整模型超参数和防止梯度消失、爆炸等问题非常有用。
1.4 对比多个模型
TensorBoard可以将多个模型的训练结果进行对比,选择最优模型。例如,比较不同超参数设置下模型的性能,或者比较不同模型架构的优劣。
二、安装tensorboard
在自己终端找到对应虚拟环境,通过下面命令安装tensorboard:
pip install tensorboard -i https://pypi.mirrors.ustc.edu.cn/simple/
2.1 参考环境
我试过torch 1.12版本,问题较多,没有正常运行起来。
下面两个是我自己试过的torch环境,都可以正常使用tensorboard,仅供参考,其它版本也可以。
三、添加损失函数曲线
3.1 add_scalar()函数
add_scalar()函数是PyTorch中用于将标量值添加到TensorBoard日志中的函数。可以跟踪训练过程中的各种指标,例如损失值、准确率等,并将其可视化为曲线图。
add_scalar()函数的功能是将指定的值添加到TensorBoard日志中,并将其与指定的标签相关联。TensorBoard会将这些值绘制成曲线图,以便直观地观察训练过程中的变化趋势。
函数语法:
add_scalar(tag, scalar_value, global_step=None)
其中:
tag:用于标识数据的标签名称,字符串类型。
scalar_value:要记录的标量值,可以是浮点数或字符串类型。可以理解为Y轴。
global_step:全局步数,整数类型。如果未指定,则使用当前迭代的步数。可以理解为X轴。
3.2 绘制曲线例子
3.2.1 代码
from torch.utils.tensorboard import SummaryWriter
import numpy as np
# 创建一个SummaryWriter对象
writer = SummaryWriter("logs")
# y = sin(x)
for i in range(100):
writer.add_scalar("y=2x",np.sin(i),i)
# 训练结束后,关闭SummaryWriter
writer.close()
3.2.2 输出
在跟目录的logs文件夹中会保存tensorboard的事件,如下:
3.2.3 启动TensorBoard可视化曲线
在对应虚拟环境终端输入下面命令,启动tensorboard
tensorboard --logdir=logs --port=6011
参数解析:
tensorboard 启动命令。
–logdir=logs 表示打开logs文件夹中的事件文件。
–port=6011 表示指定端口号,默认为6006,端口被占用是,自定义其它端口号。
将上面输出网址复制到浏览器中打开,效果如下:
3.3 深度学习训练添加TensorBoard实例
3.3.1 add_scalar()函数添加位置
现有一个我自己训练的深度学习网络,原网络没有添加TensorBoard功能,具体加在哪里?这里给学者实际举例,仅供参考,不同网络结构不一样,要理解网络后,在原网络基础上添加。
主要添加位置为主循环训练部分,反向传播后更新损失函数,此时的损失函数就可以用来作为绘制曲线的纵坐标,epoch作为横坐标。
先导入tensorboard,如下:
找到主循环训练部分,添加add_scalar()函数,如下:
最后训练完,要关闭tensorboard,如下:
3.3.2 输出
启动训练后,在训练过程中,每个epoch都会自动将事件保存到指定的log文件夹中,如下:
3.3.3 启动TensorBoard可视化曲线
启动tensorboard命令类似上面3.2.3
tensorboard --logdir=log --port=6009
将输出的网址复制到浏览器中打开,训练过程中实时观察损失函数走势,如下:
四、TensorBoard中显示图像
4.1 add_image()函数
add_image()函数是PyTorch中用于将图像数据添加到TensorBoard日志中的函数。可以查看训练过程中的输入图像、中间特征图或模型权重分布等信息。
add_image()函数的功能是将指定图像数据添加到TensorBoard日志中,并将其与指定的标签相关联。TensorBoard会将这些图像显示在网格中,以便直观地查看图像内容。
函数语法:
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
其中:
tag:用于标识数据的标签名称,字符串类型。
img_tensor:要记录的图像数据,可以是torch.Tensor、numpy.ndarray或PIL Image类型。
global_step:全局步数,整数类型。如果未指定,则使用当前迭代的步数。
walltime:记录时间戳,浮点数类型。如果未指定,则使用当前时间。
dataformats:图像数据的格式,字符串类型。可选值包括“CHW”(通道-高度-宽度)和“HWC”(高度-宽度-通道)。
注意:使用时img_tensor可以是三种数据类型,不同数据类型要求的维度顺序不一样。下面是官网的解释:
Shape:
img_tensor: Default is :math:(3, H, W)
. You can use torchvision.utils.make_grid()
to
convert a batch of tensor into 3xHxW format or call add_images
and let us do the job.
Tensor with :math:(1, H, W)
, :math:(H, W)
, :math:(H, W, 3)
is also suitable as long as
corresponding dataformats
argument is passed, e.g. CHW
, HWC
, HW
.
4.2 显示图片例子
4.2.1 代码
from torch.utils.tensorboard import SummaryWriter
import numpy as np
import cv2
# 创建一个SummaryWriter对象
writer = SummaryWriter("logs")
image_path= "Images/LMDB/Visible_Images/0001.png"
img = cv2.imread(image_path)
writer.add_image("train_image",img,1,dataformats="HWC")
# y = sin(x)
for i in range(100):
writer.add_scalar("y=sin(x)",np.sin(i),i)
# 训练结束后,关闭SummaryWriter
writer.close()
4.2.2 输出及显示效果
运行上面脚本后,刷新原先打开端口为6011的网页,效果如下:
五、总结
关于图像显示功能,可以将训练过程中的中间处理结果输出实时查看训练效果。
之前还写过一篇自己写代码实现训练过程实时可视化损失函数走势的博文,感兴趣的可以看看:训练过程实时可视化损失函数走势
显示多损失函数曲线时,多条曲线颜色自定义修改,推荐看博文:TensorBoard自定义修改单条及多条曲线颜色
以上就是深度学习模型训练添加TensorBoard实时分析可视化训练过程,希望能帮到您!
总结不易,多多支持,谢谢!
感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!