大数跨境

可视化工具:如何实现训练的可视化监控?

可视化工具:如何实现训练的可视化监控? 知识代码AI
2026-09-04
2
导读:可视化工具:如何实现训练的可视化监控?一、课程概述在深度学习模型训练过程中,常常需要对模型的参数、评价指标等信息进行可视化监控。

可视化工具:如何实现训练的可视化监控?


一、课程概述

在深度学习模型训练过程中,常常需要对模型的参数、评价指标等信息进行可视化监控。本节课主要学习两种可视化工具:[pdf_15]

工具
说明
TensorboardX
使 PyTorch 享受到 Tensorboard 的便捷功能
Visdom
Facebook 为 PyTorch 开发的交互式可视化工具,可对实时数据进行丰富的可视化,帮助实时监控实验过程

二、TensorboardX

1. 简介

Tensorboard 是 TensorFlow 的一个附加工具,用于记录训练过程的模型参数、评价指标与图像等细节内容,并通过 Web 页面 提供查看细节与过程的功能,用浏览器可视化的形式展现,帮助在实验时观察神经网络的训练过程,把握训练趋势。[pdf_15]

TensorboardX 使 TensorFlow 外的其他深度学习框架也能获取 Tensorboard 的便捷功能。

2. 安装

安装 Tensorboard:

pip install tensorboard

注意:如果已经安装过 TensorFlow,则无需额外安装 Tensorboard。

安装 TensorboardX:

PyTorch 版本
导入方式
1.8 之前 pip install tensorboardX
,然后 from tensorboardX import SummaryWriter
1.8 之后
自带 TensorboardX,直接 from torch.utils.tensorboard import SummaryWriter

3. 核心 API 详解

SummaryWriter 类

torch.utils.tensorboard.writer.SummaryWriter(log_dir=None)
  • log_dir:保存日志的路径,默认保存在 runs/当前时间_主机名 文件夹中。[pdf_15]

add_scalar —— 记录数字常量

add_scalar(tag, scalar_value, global_step=None, walltime=None)
参数
类型
说明
tag
字符串
数据的名称,不同名称的数据使用不同曲线展示
scalar_value
浮点型
要保存的数值
global_step
整型
训练的 step 数
walltime
浮点型
记录发生的时间,默认为 time.time()

一般使用 add_scalar 记录训练过程的 loss、accuracy、learning rate 等数值的变化。[pdf_15]

add_image —— 记录图像数据

add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
参数
说明
img_tensor
PyTorch 的 Tensor 或 NumPy 的 array,表示图像数据
dataformats
图像数据格式,默认为 'CHW'(Channel x Height x Width),还可为 'HWC' 或 'HW'

需要 Pillow 库的支持。[pdf_15]

4. 完整示例代码

from torch.utils.tensorboard import SummaryWriter
import numpy as np

# 创建一个 SummaryWriter 的实例
writer = SummaryWriter()

for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
    
img = np.zeros((3100100))
img[0] = np.arange(010000).reshape(100100) / 10000
img[1] = 1 - np.arange(010000).reshape(100100) / 10000

writer.add_image('my_image', img, 0)
writer.close()

5. 启动 Tensorboard

tensorboard --logdir=runs

启动后,在浏览器中输入 http://127.0.0.1:6006/(Tensorboard 默认端口为 6006)即可查看可视化结果,Tensorboard 已按照迭代 step 将 Loss 和 Accuracy 绘制成曲线图。[pdf_15]

6. 训练过程可视化(线性回归实战)

第一步:定义模型并生成训练数据

import random
import numpy as np
import torch
from torch import nn

class LinearModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(1))
        self.bias = nn.Parameter(torch.randn(1))

    def forward(self, input):
        return (input * self.weight) + self.bias

# 生成数据 y = 2x + 3
w = 2
b = 3
xlim = [-1010]
x_train = np.random.randint(low=xlim[0], high=xlim[1], size=30)
y_train = [w * x + b + random.randint(02for x in x_train]

第二步:训练过程中加入 Tensorboard 监控

# Tensorboard
from torch.utils.tensorboard import SummaryWriter

model = LinearModel()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, weight_decay=1e-2, momentum=0.9)
y_train = torch.tensor(y_train, dtype=torch.float32)

writer = SummaryWriter()

for n_iter in range(500):
    input = torch.from_numpy(x_train)
    output = model(input)
    loss = nn.MSELoss()(output, y_train)
    model.zero_grad()
    loss.backward()
    optimizer.step()
    writer.add_scalar('Loss/train', loss, n_iter)

通过以上代码,记录了训练过程中 Loss 的变化过程——Loss 呈下降趋势,说明随着训练过程,模型越来越拟合训练数据。[pdf_15]

7. 其他常用方法

TensorboardX 还有以下方法,可参考官方文档:[pdf_15]

方法
用途
add_histogram
记录权重/梯度的分布直方图
add_graph
记录网络结构图
add_embedding
记录高维数据的嵌入投影
add_audio
记录音频数据

三、Visdom

1. 简介

Visdom 是 Facebook 开源的一个专门用于 PyTorch 的交互式可视化工具,为实时数据提供丰富的可视化种类,可以在浏览器中查看,并且可以很容易地与其他人共享可视化结果,帮助实时监控在远程服务器上进行的科学实验。[pdf_15]

2. 安装与启动

安装:

pip install visdom

启动:

python -m visdom.server
参数
说明
默认端口
8097
修改端口
python -m visdom.server -p 端口号

启动成功后,在浏览器中输入 http://127.0.0.1:8097/ 进入主界面。[pdf_15]

3. 与 Tensorboard 的重要区别

工具
工作方式
Tensorboard
先生成记录文件,再启动可视化界面查看
Visdom
先启动可视化界面,当有数据进入 Visdom 窗口时,实时动态地更新并绘制数据

4. 快速上手

使用过程分四步:[pdf_15]

  1. 将窗口类 Visdom 实例化
  2. 利用 line() 方法创建一个线图窗口并初始化
  3. 利用生成的数据更新线图窗口
  4. 通过 image() 方法绘制一张图片
from visdom import Visdom
import numpy as np
import time

# 将窗口类实例化
viz = Visdom()

# 创建窗口并初始化
viz.line([0.], [0], win='train_loss', opts=dict(title='train_loss'))

for n_iter in range(10):
    # 随机获取 loss 值
    loss = 0.2 * np.random.randn() + 1
    # 更新窗口图像
    viz.line([loss], [n_iter], win='train_loss', update='append')
    time.sleep(0.5)

img = np.zeros((3100100))
img[0] = np.arange(010000).reshape(100100) / 10000
img[1] = 1 - np.arange(010000).reshape(100100) / 10000

# 可视化图像
viz.image(img)

使用过程与 Tensorboard 基本一致,只是函数调用上的不同。Visdom 绘制数据时是动态更新的。[pdf_15]

5. 训练可视化监控(完整代码)

Visdom 监控训练过程大致分三步:[pdf_15]

  1. 实例化一个窗口
  2. 初始化窗口的信息
  3. 更新监听的信息
# Visdom
from visdom import Visdom
import numpy as np

# 训练
model = LinearModel()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4, weight_decay=1e-2, momentum=0.9)
y_train = torch.tensor(y_train, dtype=torch.float32)

# 实例化一个窗口
viz = Visdom(port=8097)

# 初始化窗口的信息
viz.line([0.], [0.], win='train_loss', opts=dict(title='train loss'))

for n_iter in range(500):
    input = torch.from_numpy(x_train)
    output = model(input)
    loss = nn.MSELoss()(output, y_train)
    model.zero_grad()
    loss.backward()
    optimizer.step()
    # 更新监听的信息
    viz.line([loss.item()], [n_iter], win='train_loss', update='append')

注意: Visdom 不会像 Tensorboard 自动对曲线进行缩放或平滑,因此 50 轮之后,由于 Loss 值变化范围比较小,图像的抖动趋势会被压缩得非常不明显。[pdf_15]


四、可视化工具对比总结

对比维度
TensorboardX
Visdom
开发方
TensorFlow 团队(X 版本为社区适配)
Facebook
工作方式
先记录文件,后启动查看
先启动服务,数据实时动态更新
默认端口
6006
8097
启动命令 tensorboard --logdir=runs python -m visdom.server
曲线平滑
自动缩放与平滑
不自动缩放,小抖动会被压缩
核心方法 add_scalar
add_imageadd_histogram 等
line
imagescatterbar 等
适用场景
记录训练过程,离线分析
远程实时监控,实时交互

五、常见报错与解决

报错场景
解决方案
Visdom 启动报错 Error while finding module specification for 'visdom.server'
升级 pip(python -m pip install --upgrade pip),然后重新 pip install visdom
MacOS 上 Tensorboard 报错 ValueError: Duplicate plugins for name projector
依次执行 pip uninstall tb-nightly tensorboardX tensorboard,然后 pip install tensorboard
Visdom 在 Safari 浏览器上不显示
建议使用 Chrome 浏览器

六、每课一练

题目: 参考 Visdom 快速上手中的例子,现在需要生成两组随机数,分别表示 Loss 和 Accuracy。在迭代的过程中,如何用代码同时绘制出 Loss 和 Accuracy 两组数据呢?[pdf_15]

解答:

viz = Visdom()
viz.line([[0.0.]], [0], win='train', opts=dict(title='loss_accuracy', legend=['loss''acc']))

for n_iter in range(10):
    loss = 0.2 * np.random.randn() + 1
    accuracy = 0.1 * np.random.randn() + 1
    viz.line([[loss, accuracy]], [n_iter], win='train', update='append')
    time.sleep(0.5)

关键点: 使用 viz.line() 的 Y 参数传入一个二维列表 [[loss, accuracy]],并在 opts 中通过 legend 参数指定两条曲线的名称。[pdf_15]


七、小结

  1. TensorboardX:Tensorboard 的 PyTorch 版本,通过 SummaryWriter 记录训练数据,使用 add_scalar 记录 loss/accuracy 曲线,使用 add_image 记录图像,通过 tensorboard --logdir=runs 启动 Web 界面查看。
  2. Visdom:Facebook 开源的交互式可视化工具,先启动服务,数据实时动态更新。使用 viz.line() 绘制线图,使用 viz.image() 绘制图像。
  3. 核心目的:对损失值、评价指标等数据进行可视化监控,帮助感知各个参数与指标的变化,实时把握训练趋势
  4. 学习重点:如何将可视化工具应用于模型训练过程中,而不是仅仅了解 API 的调用方式。


【声明】内容源于网络
0
0
知识代码AI
技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
内容 403
粉丝 0
知识代码AI 技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
总阅读6.6k
粉丝0
内容403