1.TensorBoard 简介
-
TensorBoard 是 TensorFlow 提供的可视化工具,PyTorch 通过
torch.utils.tensorboard
模块支持 -
主要功能:可视化训练过程、模型结构、图像数据等
2. SummaryWriter 核心功能
-
创建日志记录器 :
SummaryWriter("logs")
会在指定目录创建日志文件 -
记录图像 :
add_image()
方法-
支持 numpy 数组格式的图像
-
必须指定正确的 dataformats(如 'HWC' 表示高度-宽度-通道)
-
-
记录标量 :
add_scalar()
方法-
用于记录损失、准确率等标量数据
-
参数:(标签名, y值, x值)
-
3. 图像处理流程
-
使用 PIL 的
Image.open()
加载图像 -
转换为 numpy 数组:
np.array(PIL_image)
-
检查数组形状:(高度, 宽度, 通道数)
-
确保数据类型为
uint8
(0-255范围)
4. 数据格式说明
-
图像数据格式:
-
'CHW':通道-高度-宽度(PyTorch默认)
-
'HWC':高度-宽度-通道(OpenCV/PIL默认)
-
-
标量数据格式:
- 通常用于记录训练指标随epoch/iteration的变化
5. 使用流程
-
创建 SummaryWriter 对象
-
在训练循环中使用 add_* 方法记录数据
-
训练完成后关闭 writer
-
在终端运行:
tensorboard --logdir=logs
查看可视化结果
python
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
# 1. 创建SummaryWriter对象,指定日志保存目录为"logs"
writer = SummaryWriter("logs")
# 2. 图像数据记录示例
image_path = "dataset/train/bees/39747887_42df2855ee.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL) # 将PIL图像转为numpy数组
# 打印图像数组的类型和形状
print(type(img_array))
print(img_array.shape) # 输出: (高度, 宽度, 通道数) 如(512, 768, 3) 图形RGB保存一般都是三通道
# 将图像添加到TensorBoard
# 参数说明:
# "train" - 图像在TensorBoard中的标签名
# img_array - 图像数据(numpy数组)
# 1 - 全局步数(可用于区分不同训练阶段的图像)
# dataformats='HWC' - 指定数据格式为(Height, Width, Channels)
writer.add_image("train", img_array, 1, dataformats='HWC')
# 3. 标量数据记录示例
# 记录y=2x函数的100个点
# y = 2x
for i in range(100):
writer.add_scalar("y=2x", 2*i, i)
# 4. 关闭SummaryWriter
writer.close()
启动命令
tensorboard --logdir=logs --port=6006
扩展应用
-
记录模型结构:
pythonwriter.add_graph(model, input_tensor)
-
记录直方图:
pythonwriter.add_histogram("layer1/weights", model.layer1.weight, global_step)
-
记录多组数据对比:
pythonwriter.add_scalars("loss", {"train":train_loss, "val":val_loss}, epoch)
-
记录嵌入向量:
pythonwriter.add_embedding(features, metadata=labels, label_img=images)
通过TensorBoard的这些功能,可以全面监控和可视化深度学习模型的训练过程,更好地理解和优化模型。