第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() 的第一个字符串类型的参数。

相关推荐
Learn Forever32 分钟前
【AI-ModelScope/bert-base-uncase】模型训练及使用
人工智能·深度学习·bert
拓端研究室1 小时前
专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
大数据·人工智能
飞哥数智坊1 小时前
AI编程实战:写作助手再进化,AI 能力前后端一锅出
人工智能·trae
星期天要睡觉1 小时前
计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
人工智能·opencv·计算机视觉
rhythmcc3 小时前
【visual studio】visual studio配置环境opencv和onnxruntime
c++·人工智能·opencv
暴龙胡乱写博客3 小时前
深度学习 --- 迁移学习以及onnx推理
人工智能·深度学习·迁移学习
算家计算3 小时前
DeepSeek R2因芯片问题再次延迟发布!千亿级大模型训练的算力之困
人工智能·芯片·deepseek
月岛雫-3 小时前
Revisiting Character-level Adversarial Attacks for Language Models
人工智能·语言模型·自然语言处理
算家计算3 小时前
130亿参数开源之巅!HunyuanVideo本地部署教程:导演级运镜 × 物理级流畅
人工智能·开源·aigc