TensorBoard
目录
TensorBoard
SummaryWriter类
1. .add_scalar
样例
2. .add_image()
样例
TensorBoard
TensorBoard 是 TensorFlow 的可视化工具组件,可帮助用户理解、调试和优化深度学习模型。它通过可视化训练过程中的指标(如损失函数和准确率)、模型结构、权重分布等信息,帮助用户直观地监控和分析模型训练过程。
核心功能:
-
标量可视化:展示训练和评估过程中的标量值,如损失值、准确率等。
-
图结构可视化:显示模型的计算图,帮助理解模型架构。
-
分布可视化:展示张量(如权重、偏置)的分布变化。
-
直方图:显示张量的分布随时间的变化。
-
嵌入可视化:高维数据的低维表示,用于聚类分析。
-
图像 / 音频可视化:展示输入数据、生成的图像或音频样本。
用简单的语言说明什么是TensorBoard以及为什么需要:
什么是 TensorBoard?
TensorBoard 是一个可视化工具,就像你在健身房用镜子观察自己的动作一样,它能让你 “看到” 神经网络的训练过程。比如:
-
模型是否在学习?(损失值是否下降)
-
训练和测试的准确率差距有多大?(过拟合检测)
-
模型内部的权重是如何变化的?
为什么需要 TensorBoard?
想象你在黑暗中投篮,却不知道球是否接近篮筐。训练神经网络也一样,如果没有可视化工具,你只能盲目调整参数。TensorBoard 就像一盏灯,照亮训练过程:
-
实时监控:边训练边查看结果
-
问题诊断:快速发现过拟合、梯度消失等问题
-
参数调优:对比不同超参数设置的效果
下载TensorBoard
SummaryWriter
类
官方文档注释:
"""Writes entries directly to event files in the log_dir to be consumed by TensorBoard.The `SummaryWriter` class provides a high-level API to create an event filein a given directory and add summaries and events to it. The class updates thefile contents asynchronously. This allows a training program to call methodsto add data to the file directly from the training loop, without slowing downtraining."""
"""将记录直接写入日志目录(log_dir)中的事件文件,供TensorBoard读取。`SummaryWriter`类提供了一个高级API,用于在指定目录创建事件文件,并向其中添加摘要(summaries)和事件(events)。该类以异步方式更新文件内容,这使得训练程序可以在训练循环中直接调用方法添加数据,而不会减慢训练速度。
"""
方法:
1. .add_scalar
参数:tag (字符串):数据标识符(用于在TensorBoard中区分不同数据)scalar_value (浮点数或字符串/blob名称):要保存的标量值global_step (整数):要记录的全局步骤值(通常对应训练步数/轮次,作为X轴坐标)walltime (浮点数,可选):可选参数,用于覆盖默认的 walltime(即time.time()),以事件发生的纪元秒数(从1970年1月1日开始的秒数)表示new_style (布尔值):是否使用新格式(tensor字段)或旧格式(simple_value字段)。新格式可能会加快数据加载速度。
常用前三个参数
tag为表头
scalar_value为纵坐标
global_step 为横坐标
# 记录标量数据(如损失值、准确率等)
# 第一个参数:标量标签(格式:"类别/具体指标",便于分组查看)
# 第二个参数:要记录的标量值(如损失函数计算结果)
# 第三个参数:全局步骤(X轴坐标,通常是训练步数)
writer.add_scalar("Loss/训练", loss_value, global_step=step)
writer.add_scalar("Accuracy/验证", acc_value, global_step=epoch)
样例
writer=SummaryWriter("logs")
#y=x
for i in range(100):writer.add_scalar("y=x",i,i)
运行后:
会出现logs文件夹
打开并展示:
默认在6006端口打开
(pytorch) PS D:\Python\learn_pytorch> tensorboard --logdir=logs
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.19.0 at http://localhost:6006/ (Press CTRL+C to quit)
若端口冲突,可以自己设置
(pytorch) PS D:\Python\learn_pytorch> tensorboard --logdir=logs --port=6007
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.19.0 at http://localhost:6007/ (Press CTRL+C to quit)
直接点击网址或者复制到浏览器打开
y=2x:
#y=2x
for i in range(100):writer.add_scalar("y=2x",2*i,i)writer.close()
重新运行python文件,然后在浏览器刷新页面即可,不用重启TensorBoard
2. .add_image()
注意:这需要安装 ``pillow`` 包。参数:tag (字符串):数据标识符(用于在TensorBoard中区分不同图像)img_tensor(PyTorch张量、NumPy数组或字符串/blob名称):图像数据global_step (整数):要记录的全局步骤值(通常对应训练步数/轮次,用于标记图像的时间点)walltime (浮点数,可选):可选参数,用于覆盖默认的 walltime(即time.time()),以事件发生的纪元秒数(从1970年1月1日开始的秒数)表示dataformats (字符串):图像数据格式的说明,格式如 CHW、HWC、HW、WH 等。形状:img_tensor:默认格式为 :math:`(3, H, W)`(3通道、高度H、宽度W)。你可以使用 ``torchvision.utils.make_grid()`` 将一批张量转换为 3xHxW 格式,或者调用 ``add_images`` 方法,让程序自动处理批量图像。只要传入对应的 ``dataformats`` 参数(如 ``CHW``、``HWC``、``HW``),以下形状的张量也适用::math:`(1, H, W)`(单通道灰度图)、:math:`(H, W)`(无通道灰度图)、:math:`(H, W, 3)`(通道在最后的RGB图)。
注意img_tensor的类型和形状(形状要注意设置额外的参数,如上所述)
常用的PIL打开的图片类型即不符合要求
可以转化:
也可以用其他方式打开图片(opencv)
样例
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter=SummaryWriter("logs")
img_PIL = Image.open("dataset_practice/train/ants_image/0013035.jpg")
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("test",img_array,1,dataformats="HWC")writer.close()
图片形状是HWC,不符合参数的默认要求,增加dataformates参数
运行后即可在TensorBoard里看到图片