当前位置: 首页 > ds >正文

TensorBoard

目录

TensorBoard

SummaryWriter类 

1.  .add_scalar 

样例

2. .add_image()

样例 


TensorBoard

TensorBoard 是 TensorFlow 的可视化工具组件,可帮助用户理解、调试和优化深度学习模型。它通过可视化训练过程中的指标(如损失函数和准确率)、模型结构、权重分布等信息,帮助用户直观地监控和分析模型训练过程。

核心功能:

  1. 标量可视化:展示训练和评估过程中的标量值,如损失值、准确率等。

  2. 图结构可视化:显示模型的计算图,帮助理解模型架构。

  3. 分布可视化:展示张量(如权重、偏置)的分布变化。

  4. 直方图:显示张量的分布随时间的变化。

  5. 嵌入可视化:高维数据的低维表示,用于聚类分析。

  6. 图像 / 音频可视化:展示输入数据、生成的图像或音频样本。

 用简单的语言说明什么是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里看到图片 

http://www.xdnf.cn/news/15371.html

相关文章:

  • 【QT】多线程相关教程
  • 【面试八股文】2025最新软件测试面试
  • 股票的k线
  • React useState原理解密:从源码到实战
  • 苍穹外卖-day06
  • JavaScript代码段注入:动态抓取DOM元素的原理与实践
  • 巅峰对决:文心4.5 vs DeepSeek R1 vs 通义Qwen3.0——国产大模型技术路线与场景能力深度横评
  • Python-魔术方法-创建、初始化与销毁-hash-bool-可视化-运算符重载-容器和大小-可调用对象-上下文管理-反射-描述器-二分-学习笔记
  • 代码训练LeetCode(46)旋转图像
  • Java应用全链路故障排查实战指南:从系统资源到JVM深度诊断
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究
  • 不止于监控:深入剖析OpenTelemetry的可观察性生态体系
  • 江协科技STM32入门教程——通信接口
  • Web安全-Linux基础-02-系统基础命令
  • QCustomPlot绘制交互图
  • VUE3 el-table 主子表 显示
  • 【极客日常】后端任务动态注入执行策略的一种技术实现
  • 解决bash终端的路径名称乱码问题
  • Spring之【写一个简单的IOC容器EasySpring】
  • 批量自动运行多个 Jupyter Notebook 文件的方法!!!
  • 创建Spring Boot项目
  • 基于 Redisson 实现分布式系统下的接口限流
  • 网络安全初级第一次作业
  • MacOS环境下运行EasySearch报错无法信任Java包的解决方案
  • ServiceNow Portal前端页面实战讲解
  • GGE Lua 详细教程
  • 【6.1.1 漫画分库分表】
  • c#中生成随机数的三种方法
  • pgsql模板是什么?
  • Kafka——聊聊Kafka的版本号