第3节 TensorBoard

TensorBoard是一个用于可视化机器学习实验结果的工具,可以帮助我们更好地理解和调试训练过程中的模型。

在PyTorch中,我们可以使用TensorBoardX库来与TensorBoard进行交互。TensorBoardX是一个PyTorch的扩展,它允许我们将PyTorch的训练中的关键指标和摘要写入TensorBoard的事件文件中。

3.1 TensorBoard使用

安装TensorBoard: pip install tensorboard

  1. add_scalar()的使用,常用来绘制(train/val loss)
  2. add_image()的使用,常用来观察训练结果

学习TensorBoard的目的:

  1. 训练过程中的loss是如何变化的。
  2. 模型在不同阶段的输出

3.1.1 SummaryWriter类

SummaryWriter 是 PyTorch 中 TensorBoard 的核心类,用于向 TensorBoard 写入各种类型的日志数据,方便可视化训练过程中的指标、图像、模型结构等信息。通过它可以实时监控训练进度,分析模型性能。

常用方法:

(1)、def__init__()

**功能:**初始化 SummaryWriter 对象

参数说明:

log_dir:日志文件保存路径,默认生成 runs/ 目录

comment:日志目录的附加注释

flush_secs:自动刷新到磁盘的时间间隔(秒)

(2)、add_acalars()

**功能:**同时记录多个标量数据(如同时记录训练和验证损失)

参数说明:

main_tag:主标签

tag_scalar_dict:键值对形式的多个标量

(3)、add_scalar()

**功能:**记录标量数据(如损失值、准确率)

参数说明:

tag:数据标签(如 'loss/train')

scalar_value:要记录的标量值

global_step:训练步数,用于横轴坐标

(4)、add_image()

**功能:**记录单个图像

参数说明:

tag:数据标签

img_tensor:图像张量,需注意数据格式(默认 CHW)

支持 PIL 图像转换为张量后传入

(5)、add_images()

功能:一次记录多张图像

参数说明:

tag:数据标签

img_tensor:包含多个图像的张量

(6)、add_histogram()

**功能:**记录张量的直方图(如权重分布、梯度分布),用于观察参数变化趋势

(7)、add_text()

**功能:**记录文本信息(如超参数设置、训练日志)

**参数说明:**text_string:要记录的文本内容

(8)、close()

**功能:**关闭 SummaryWriter,释放资源,建议在程序结束时调用。

3.1.2 add_scalar() 方法使用

**功能:**记录标量数据(如损失值、准确率)

参数说明:

tag:数据标签(如 'loss/train')

scalar_value:要记录的标量值(y轴)

global_step:训练步数,用于横轴坐标(x轴)

例如: y=x

python 复制代码
from torch.utils.tensorboard import SummaryWriter

# 创建SummaryWriter实例,指定日志文件保存到"Logs"目录下
# 如果该目录不存在,会自动创建
writer = SummaryWriter("Logs")

# 循环100次,模拟训练过程中的100个步骤
for i in range(100):
    # 向TensorBoard添加标量数据
    # 参数说明:
    # "y=x":数据的标签名称,用于在TensorBoard中识别该曲线
    # i:要记录的标量值(这里y值等于x值)
    # i:全局步骤值(x轴坐标,这里与y值相同)
    writer.add_scalar("y=x", i, i)

# 关闭SummaryWriter,释放资源,确保所有日志数据都被写入文件
writer.close()

运行上述代码后,会产生一个Logs文件夹,如下图:

如何打开上述文件?

在终端输入:tensorboard ---logdir=Logs # logdir=事件文件所在的文件夹名

点击链接跳转:

为了和别人冲突,也可以指定端口打开tensorboard,输入指令:

tensorboard --logdir=Logs --port=6007

例如:y=2x

修改这行代码,其他与y=x例子代码一样

当tag与y不一致时的情况:

下面这种情况是不对的

每向 writer 中写入新的事件,也记录了上一个事件。

如何解决?

把logs文件夹下的所有文件删掉,程序删掉,重新开始或:重新写一个子文件,即创建新的 SummaryWriter("新文件夹")删掉logs下的文件,重新运行代码,在 Terminal 里按 Ctrl+C ,再输入命令:

tensorboard --logdir=logs --port=6007就可以出现名字为y=2x,但实际纵坐标是y=3x数值的图像。

3.1.3 add_image()的使用

功能: 记录单张图片

参数说明:

tag:对应图像的title

img_tensor:图像的数据类型,只能是torch.Tensor、numpy.array、string/blobnaem

global_step:训练步骤,int 类型

在python控制台输出图片类型,发现其类型是PIL.格式,不符合add_image()中的img_tensor参数所需要的图片类型数据格式。需要将其利用opencv(numpy.array())读取图片,来获得numpy型图片数据。

由于我的python版本是3.6需要装opencv的版本有限制,要装

pip install opencv -python==4.3.0.38

这是将PIL.格式转成numpy.ndarray格式

1 )、程序:在 TensorBoard 显示蚂蚁图片

python 复制代码
from torch.utils.tensorboard import SummaryWriter  # 导入SummaryWriter类
import numpy as np
from PIL import Image

# 创建实例
writer = SummaryWriter("Logs")  # 把对应的事件文件存储到logs文件夹下
image_path = "Datasets/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)  # (512,768,3)  即(H,W,C)(高度,宽度,通道)

writer.add_image("test", img_array, 1, dataformats='HWC')  # 第1步

writer.close()

运行结果:

2 )、程序: TensorBoard 显示蜜蜂

将上面的程序修改路径即可,就改一行代码。其他跟上面一样

image_path = "Datasets/train/bees_image/16838648_415acd9e3f.jpg"

在一个title下,通过滑块显示每一步的图形,可以直观地观察训练中给model提供了哪些数据,或者想对model进行测试时,可以看到每个阶段的输出结果。

如果想要单独显示,重命名一下title即可,即 writer.add_image() 的第一个字符串类型的参数。

相关推荐
AI医影跨模态组学5 小时前
NPJ Precis Oncol 广东省人民医院放射科刘再毅团队:基于纵向MRI的深度学习模型预测乳腺癌病理完全缓解
人工智能·深度学习·论文·医学·医学影像
2301_764441335 小时前
2026年1月至4月期间,大模型招投标市场态势
人工智能·语言模型·信息与通信
Thanwind5 小时前
从0开始的机器学习之旅(一):什么是机器学习
人工智能·机器学习
ChatInfo5 小时前
多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG
人工智能
明月照山海-5 小时前
机器学习周报四十
人工智能·机器学习
ghie90905 小时前
隐马尔科夫模型(HMM)在语音识别领域的应用与代码实现
人工智能·语音识别
小墨同学boy5 小时前
越用越强不是广告语:拆解 Hermes Agent 的三层学习机制
人工智能·学习
kyle-fang5 小时前
主流微调工具
人工智能·语言模型
sunz_dragon5 小时前
Claude Code / Codex Git 版本管理完整使用指南
服务器·人工智能
Are_You_Okkk_5 小时前
中小型团队知识库搭建:AI开源实践方案
人工智能·开源