一,Tensorboard 的安装
首先在pycharm中创建项目并设置解释器为Anacanda
创建项目(例:test.py)
接下来进入终端输入 pip install tensorboard
进而安装tensorboard
二,tensorboard 两个比较常用的使用 及 使用中可能出现的问题
1,.add_scalar() 方法的使用
例:
1. 导入模块
from torch.utils.tensorboard import SummaryWriter
从 PyTorch 的工具模块中,导入 SummaryWriter
类。SummaryWriter
是 TensorBoard 数据记录的核心类,负责将各种类型的数据(标量、图像、模型结构等 )写入日志文件,供 TensorBoard 可视化。
2. 创建 SummaryWriter
对象
writer = SummaryWriter('logs')
实例化 SummaryWriter
,参数 'logs'
是日志文件的保存目录。运行代码后,TensorBoard 会从这个目录加载数据进行可视化,目录不存在时会自动创建。
3. 循环记录标量数据
for i in range(100):
writer.add_scalar("y=x", i, i)
-
循环逻辑:
for i in range(100)
会让代码执行 100 次(i
从 0 到 99 )。 -
add_scalar
方法:-
第一个参数
"y=x"
是 标量数据的标签(tag),用于在 TensorBoard 中区分不同的数据系列,比如可用来标识 “损失值”“准确率” 等。 -
第二个参数
i
是 标量的值(scalar value),这里让值随循环次数递增。 -
第三个参数
i
是 全局步骤(global step),表示该数据对应的训练步骤(或迭代次数 ),TensorBoard 会用它来横 -
-
轴绘图,体现数据随步骤的变化趋势。
这段逻辑会记录 100 个标量,标签为"y=x"
,值和步骤均为0
到99
。
-
-
4. 关闭
SummaryWriter
python
运行
writer.close()
小技巧:按住CTRL 光标指向即可获得help
例如add_scalar方法help
5,打开方式
进入终端输入 tensortbroad --logdir=logs
点击网址即可进入
-
补充
-
利用port可以改变网络节点避免默认节点(6007)人数多造成卡顿
-
例如输入 tensorbroad --logdir=logs --port=6008
-
常见错误:没有运行 直接 进入终端(只有运行后才会上传数据)
图像重合乱码解决方案:
情况lg:与定义图像不符
原因:多次运行 导致logs文件堆叠进而导致图像堆叠
解救方案:
打开logs文件夹把内容删除 而后重新运行即可(如有更优方案请评论谢谢)、
2,.add_image()方法的使用
例:
1. 模块导入
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
-
SummaryWriter
:PyTorch 与 TensorBoard 交互的核心类,用于写入日志数据(标量、图像等 )。 -
numpy
:常用数值计算库,别名np
,用于将 PIL 图像转换为数组。 -
Image
:PIL(Python Imaging Library )的图像操作类,用于加载、处理图像。
2. 图像加载与转换
image_path = "E:\\pycharm\\pythonProject5\\屏幕截图 2024-12-11 130916.png"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
-
image_path
:定义图像文件的路径(注意用双反斜杠\\
处理路径转义 )。 -
Image.open(image_path)
:调用 PIL 加载图像,返回PIL.Image
对象(img_PIL
)。 -
np.array(img_PIL)
:将 PIL 图像对象转换为 NumPy 数组(img_array
),方便 TensorBoard 处理。
3. TensorBoard 日志初始化
writer = SummaryWriter("logs")
创建 SummaryWriter
实例,指定日志保存目录为 logs
(目录自动创建,后续 TensorBoard 从该目录读数据 )。
4. 图像写入 TensorBoard
writer.add_image("test", img_array, 1, dataformats='HWC')
-
add_image
方法:向 TensorBoard 写入图像数据。-
第一个参数
"test"
:图像在 TensorBoard 中的 标签(tag),用于区分不同图像。 -
第二个参数
img_array
:图像的 NumPy 数组数据。 -
第三个参数
1
:全局步骤(global step),标识该图像对应的训练步骤(可理解为 “第 1 步的图像” )。 -
dataformats='HWC'
:指定图像数组的维度顺序,HWC
表示 高度(Height)、宽度(Width)、通道(Channel)(常见于 PIL 加载的图像,如 RGB 图像是 3 通道 )。
-
5. 标量数据循环记录
for i in range(100):
writer.add_scalar("y=x", i, i)
-
循环逻辑:执行 100 次(
i
从 0 到 99 )。 -
add_scalar
方法:记录标量数据到 TensorBoard。-
"y=x"
:标量的 标签,用于 TensorBoard 中标识数据系列(如 “损失值”“准确率” )。 -
第一个
i
:标量的 值(随循环递增 )。 -
第二个
i
:全局步骤(与值同步递增,TensorBoard 用它绘制横轴 )。
-
6. 关闭资源
writer.close()
7,报错处理
例1
报错 SyntaxWarning: invalid escape sequence '\p'
是因为路径里的反斜杠 \
被 Python 识别成转义字符了。
解决办法:把路径里的反斜杠 \
换成双反斜杠 \\
,或者用正斜杠 /
,
例2
从报错 TypeError: Cannot handle this data type: (1, 1, 1596), |u1
看,是 add_image
时数据格式不兼容。add_image
要求图像张量维度通常为 (C, H, W)
(通道在前) ,你用 PIL
转的数组可能是 (H, W, C)
(通道在后)且数据类型等不匹配。
解决方法:在传给 add_image
前,调整维度和数据类型,比如:
import torch
# 假设 img_arr 是 (H, W, C) 的 numpy 数组
img_tensor = torch.from_numpy(img_arr).permute(2, 0, 1).float() # 转置维度为 (C, H, W),转 float 类型
writer.add_image("test", img_tensor, 1)
这样调整后,适配 SummaryWriter.add_image
对输入张量的要求,大概率能解决报错。 核心就是让图像数据的维度顺序、数据类型符合 PyTorch TensorBoard
期望 。