一、什么是Tensorboard
Tensorboard 是一个可视化工具,通常用于机器学习项目中,以帮助用户理解、调试和优化模型。它是 TensorFlow 的一部分,但可以与 PyTorch 一起使用。其主要功能包括:
- 可视化训练过程:查看模型的损失和准确率随时间变化的曲线。
- 查看模型图:了解模型的结构和各层之间的关系。
- 分析数据分布:可视化分布情况,例如权重和偏差的直方图。
- 文本和图像数据可视化:查看训练时的图片或者文本输出。
简单来说:Tensor可以
- 显示 loss 函数变化曲线
- 显示 准确率曲线
- 展示 模型结构
- 查看 图片、文本、嵌入向量
- 分析 直方图、分布图、学习率变化
二、Tensorboarf的使用
使用 Tensorboard 可视化 PyTorch 训练过程
如何使用 Tensorboard 来可视化一个简单的线性模型的训练过程。
-
导入相关库
pythonimport torch from torch import nn, optim from torch.utils.tensorboard import SummaryWriter
torch
是 PyTorch 的主要库,用于创建和训练模型。nn
包含了各种神经网络层和功能。optim
用于优化算法,例如梯度下降。SummaryWriter
是 Tensorboard 的工具,可以用来记录数据以便后续的可视化。
-
定义一个简单的线性模型
pythonclass LinearModel(nn.Module): def __init__(self): super(LinearModel, self).__init__() self.linear = nn.Linear(1, 1) def forward(self, x): return self.linear(x)
- 这里定义了一个简单的线性模型,只有一个线性层。
nn.Linear(1, 1)
表示线性层输入和输出都是一个单独的数字。forward
方法定义了数据如何经过模型处理,它将输入的数据通过线性层。
-
初始化模型、损失函数和优化器
pythonmodel = LinearModel() criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01)
model
是刚才定义的线性模型。criterion
是损失函数,这里使用均方误差(MSELoss),它用于衡量模型预测值与真实值间的误差。optimizer
使用随机梯度下降(SGD)来更新模型参数,学习率为0.01
。
-
设置 Tensorboard
pythonwriter = SummaryWriter('runs/simple_linear_example')
- 创建一个
SummaryWriter
实例,它会写入数据到指定目录,这里是runs/simple_linear_example
。
- 创建一个
-
生成简单的数据
pythonx_train = torch.unsqueeze(torch.arange(0., 1., 0.01), dim=1) y_train = x_train * 2 + torch.randn(x_train.size()) * 0.1
- 创建简单的训练数据:
x_train
是从 0 到 1 的数,每隔 0.01 取一个数。 y_train
是想让模型学习的目标,它是x
的两倍加上一些随机噪声。
- 创建简单的训练数据:
-
训练模型并记录损失
pythonfor epoch in range(100): optimizer.zero_grad() predictions = model(x_train) loss = criterion(predictions, y_train) loss.backward() optimizer.step() writer.add_scalar('Training Loss', loss.item(), epoch)
- 进行 100 次 epoch 的训练。在每个 epoch:
- 清除之前的梯度(
optimizer.zero_grad()
)。 - 计算模型对训练数据的预测值(
predictions
)。 - 计算损失,即预测值与真实值之间的差距(
loss
)。 - 反向传播以计算梯度(
loss.backward()
)。 - 根据计算的梯度更新模型的参数(
optimizer.step()
)。 - 使用
writer.add_scalar
将损失的数值记录到 Tensorboard,以便后续可视化。
- 清除之前的梯度(
- 进行 100 次 epoch 的训练。在每个 epoch:
-
关闭 writer
pythonwriter.close()
- 关闭 SummaryWriter 以确保所有数据都被正确写入。
启动 Tensorboard
在你运行完这段代码后,可以启动 Tensorboard 来查看记录的损失:
ini
bash
tensorboard --logdir=runs
在浏览器中访问 http://localhost:6006
,将看到一个图表显示训练损失随 epoch 变化,这让你能够直观地观察模型的学习过程。
三、更为简单的例子
1.Tensorboard写日志和读日志
网页截图

2.Tensorboard读图片
python
from torch.utils.tensorboard import SummaryWriter
from PIL import Image#PIL是python的图像处理库
import numpy as np
img_path1 = "hymenoptera_data/train/ants/0013035.jpg"
img_PIL1 = Image.open(img_path1)#打开图片
img_array1 = np.array(img_PIL1)#将图片转换为numpy数组
img_path2 = "hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg"
img_PIL2 = Image.open(img_path2)
img_array2 = np.array(img_PIL2)
writer = SummaryWriter("logs")
writer.add_image("test",img_array1,1,dataformats="HWC")
#test代表log_name,img_array1代表图片,1表示该图片在第1步,dataformats="HWC"表示图片的格式为HWC,H代表高度,W代表宽度,C代表通道数
writer.add_image("test",img_array2,2,dataformats="HWC")
#test代表log_name,img_array2代表图片,2表示该图片在第2步,dataformats="HWC"表示图片的格式为HWC,H代表高度,W代表宽度,C代表通道数
writer.close()
网页截图:
ps:为了防止logs文件相互影响,可以把不用的日志删除。