30天从入门到精通TensorFlow1.x 第六天,可视化工具 TensorBoard

news2024/11/27 10:38:36

文章目录

  • 一、接前一天
  • 二、TensorBoard
    • (1). 什么是TensorBoard
    • (2). TensorBoard有什么用
    • (3). TensorBoard怎么安装
  • 三、tf.summary模块
    • (1).如何使用`tensorboard`
    • (2).`tf.summary`模块的主要参数和函数
      • a. `参数`
        • 1.参数:name
        • 2.参数:tensor
      • b. `函数`
        • 1.函数:`tf.summary.scalar`
        • 2.函数:`tf.summary.histogram`
        • 3.函数:tf.summary.image
        • 4.函数:`tf.summary.merge`
        • 5.函数:`tf.summary.FileWriter`
    • (3). 模块中`.add_summary()`函数
  • 四、可视化实践
    • `使用`:
    • `代码`: 用一个简单的 线性回归 使用tensorboard工具
    • `结果展示`:

一、接前一天

前一天讨论了TensorFlow中的计算图,的创建和计算。至于多计算图改天讨论,今天主要讨论,可视化工具 TensorBoard

二、TensorBoard

(1). 什么是TensorBoard

TensorBoard是一个工具,用于可视化理解TensorFlow运行的神经网络模型。其原理主要基于TensorFlow在训练神经网络时自动记录了大量有关模型性能和状态的数据,并将这些数据保存到一组日志文件中。TensorBoard读取这些日志文件并呈现以易于理解的方式可视化的信息,例如损失曲线、精度曲线、图形表示、直方图等等。TensorBoard还提供了交互式控件,可以通过调整模型参数超参数观察模型输出的变化。这使得深度学习研究人员可以更有效地分析和优化他们的神经网络模型。

(2). TensorBoard有什么用

  1. 可视化模型结构:TensorBoard 可以显示 Python 代码中定义的计算图,该图表示了模型的结构和参数,包括张量的形状、数据类型、操作等信息。这有助于理解模型的复杂度、层次结构和输入输出形状。

  2. 跟踪指标和摘要:TensorBoard 可以记录显示模型的训练指标(如准确率、损失函数值等)和摘要(如直方图、概率密度函数、图像等),以便可以监控并比较不同模型不同超参数下的性能。您还可以覆盖摘要以生成更高级别的可视化效果。

  3. 分析计算时间和内存消耗:TensorBoard 可以分析模型的运行时间内存消耗,并在图表中显示结果。这有助于您找出模型的瓶颈和优化点,以提高性能和效率。

  4. 可视化嵌入向量:如果您正在训练嵌入向量,TensorBoard 可以将它们投影到高维空间中,并显示它们之间的关系。这有助于您理解向量的语义含义相似性,以及在不同任务和领域中的通用性。

(3). TensorBoard怎么安装

一般 pip install TensorFlow 会自动安装
或者:pip install tensorboard
更新命令:pip install --upgrade tensorflow-tensorboard

三、tf.summary模块

(1).如何使用tensorboard

主要基于tf.summary模块,该模块是TensorFlow提供的用于可视化数据和图像等各种信息的工具包。其中包含了很多函数和参数。

(2).tf.summary模块的主要参数和函数

a. 参数

1.参数:name

tf.summary中的很多函数都有一个name参数,用于给生成的summary命名,方便在TensorBoard中查看和管理。name参数通常接收一个字符串作为输入。

2.参数:tensor

tensor参数指定了需要记录的张量(tensor)。可以是单个张量,也可以是张量列表。如果是张量列表,则会将所有张量记录到同一个summary中。

b. 函数

1.函数:tf.summary.scalar

如果要记录标量数据(如损失值、精确度等),可以使用tf.summary.scalar()函数。该函数需要提供两个参数:一个是名称,用于标识这个指标;另一个是实际的数值。在训练过程中,每次调用该函数都会记录对应的名称和数值,最终存储到日志文件中。

注意!!!!:标量数据,传入的tensor应当是标量张量(scalar tensor),也就是只包含一个数值的张量。如果传入的是非标量张量例如:shape为[2,3]的张量,则会报错。因此,在使用tf.summary.scalar函数时,需要确保传入的tensor是标量张量

tf.summary.scalar函数用于记录标量值。需要传入两个参数:name和tensor。例如:

loss_summary = tf.summary.scalar(name='loss', tensor=loss)


这行代码会生成一个名为"loss"summary,其中记录了当前的损失值

2.函数:tf.summary.histogram

记录张量数据(如权重、偏置项等),可以使用tf.summary.histogram()函数。该函数也需要提供一个名称和实际的张量数据。类似地,在训练过程中每次调用该函数都会记录对应的名称和张量数据,并将它们转换成直方图形式存储到日志文件中

tf.summary.histogram函数用于记录张量的分布情况。需要传入两个参数:name和tensor。例如:

weights_summary = tf.summary.histogram(name='weights', tensor=weights)

这行代码会生成一个名为"weights"的summary,其中记录了权重张量的分布情况。

3.函数:tf.summary.image

tf.summary.image函数用于记录图像信息。需要传入三个参数:nametensormax_outputs。其中name和tensor与前面的函数相同,max_outputs指定了要记录的图像数量。例如:

image_summary = tf.summary.image(name='image', tensor=image, max_outputs=10)

这行代码会生成一个名为"image"的summary,其中记录了前10个图像的信息。

4.函数:tf.summary.merge

比如在我们模型中使用了多个 函数展示时候,使用这个函数将他们合并。
tf.summary.merge函数用于将多个summary合并成一个。通常在训练过程中,需要记录多个信息,比如损失值权重分布等等。这些信息可以通过不同的summary进行记录,最后使用tf.summary.merge函数将它们合并起来。例如:

summaries = [loss_summary, weights_summary, image_summary]
merged_summary = tf.summary.merge(summaries)

这行代码将之前生成的三个summary合并成一个merged_summary。

5.函数:tf.summary.FileWriter

tf.summary.FileWriter函数用于将summary写入磁盘,以便在TensorBoard中查看。需要传入两个参数:logdirgraph。其中logdir指定了保存summary的目录,而graph指定了当前的计算图(可选)。例如:

with tf.summary.FileWriter(logdir='logs', graph=tf.get_default_graph()) as writer:
    writer.add_summary(merged_summary, global_step=step)
'''
一般使用tensorboard工具前先执行代码生成摘要日志
'''

这段代码将之前生成的merged_summary写入logs目录,并指定了当前的计算图。同时,还通过global_step参数指定了当前的步数,方便在TensorBoard中进行对比和分析

(3). 模块中.add_summary()函数

writer.add_summary()函数是用于将summary写入磁盘的函数,可以将生成的summary记录到指定的目录中,以便在TensorBoard中进行可视化分析。

这个函数需要传入两个参数:summaryglobal_step。其中,summary是通过tf.summary模块生成的summary对象,可以是一个单独的summary,也可以是多个summary合并后的结果;global_step表示当前的训练步数,用于在TensorBoard中进行对比和分析。

在使用writer.add_summary()函数时,通常会将它放在训练循环中,每当执行一次训练迭代时就调用一次该函数,以实时记录训练过程中的各种信息。例如:

with tf.summary.FileWriter(logdir) as writer:
    for step in range(num_steps):
        # 执行训练操作,得到loss值和其他参数
        loss, acc, summary = sess.run([train_op, accuracy, merged_summary])
        # 将summary写入磁盘
        writer.add_summary(summary, global_step=step)

四、可视化实践

使用

在项目文件夹下:
执行 tensorboard --logdir='logss' ,logss是summary写入磁盘的地址
会生成 TensorBoard 1.14.0 at http://ubuntu:6006/ (Press CTRL+C to quit)点击网址即可。

例如:

在这里插入图片描述

代码: 用一个简单的 线性回归 使用tensorboard工具

import tensorflow as tf
from tensorflow.python.client import device_lib
import os
print(device_lib.list_local_devices())




tf.reset_default_graph()

with tf.device("/device:cpu:0"):
    # create w and b init 0.0
    w = tf.Variable(0.0, name='weight')
    b = tf.Variable(0.0, name='bias')

    # create input and out
    x = tf.placeholder(dtype=tf.float32, shape=[None])
    out = tf.placeholder(dtype=tf.float32, shape=[None])

    # create loss and opt
    y = w * x + b

    loss = tf.reduce_mean(tf.square(y - out))
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
    train_op = optimizer.minimize(loss)

config = tf.ConfigProto()
config.log_device_placement=True

output_scalar = tf.reduce_mean(y)  # 将 y 变量转换为标量
loss_scalar = tf.reduce_mean(loss)

# 记录标量数据(输出结果和损失值) 注意:此处应该是标量
tf.summary.scalar('output', output_scalar)
tf.summary.scalar('loss', loss_scalar)

# 记录张量数据(权重和偏置项)
tf.summary.histogram('weight', w)
tf.summary.histogram('bias', b)

# 记录网络结构
with tf.name_scope('hidden'):
    h = tf.nn.sigmoid(y)
    tf.summary.histogram('activation', h)

# train model
with tf.Session(config=config) as sess:
    # # 设置 XLA_CPU 环境变量
    # os.environ['TF_XLA_FLAGS'] = '--tf_xla_cpu_global_jit'

    # 合并所有的摘要操作
    merged = tf.summary.merge_all()
   
    # 创建摘要写入器 将`summary`写入磁盘的函数
    writer = tf.summary.FileWriter('./logss', sess.graph)

    tf.global_variables_initializer().run(session=sess)
    for i in range(100000):
        summary,_, loss_val, w_val, b_val = sess.run(
            [merged,train_op, loss, w, b],
            feed_dict={x: [1, 23, 4, 5, 7, 5, 7], out: [3, 5, 7, 9, 11, 13, 15]}
        ) #注意 输入的数据 形状要一致,避免输出与预测值得形状不一致问题
        if i % 100 == 0:
            print('Step {}: loss = {}, w = {}, b = {}'.format(i, loss_val, w_val, b_val))
					
					# 将生成的summary记录到指定的目录中
            writer.add_summary(summary, i)

结果展示

不同的字段下代表着不同的可视化信息

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之二叉树(Binary Tree)详解

目录 1、什么是二叉树? 2、二叉树的遍历:深度优先和广度优先 (1)深度优先搜索(DFS)算法 (2)广度优先搜索(BFS)算法 3、二叉树的性质详解 4、二叉树的类型 (1)满二叉树 &…

IT服务台追踪的关键故障指标

指标是 IT 服务管理的核心,可提供运营见解并帮助确定持续改进的领域。通常的服务台指标有助于展示内部运营效率。为 例如,衡量在指定时间内解决的工单数量的 SLA 是展示服务台效率的关键因素。另一方面,故障指标可帮助团队识别 IT 基础架构中…

Linux基本指令学习(入门)

Linux基本指令学习 0.在xshell中登录自己的虚拟机1. ls指令2. pwd命令3. cd 指令4. touch指令5.mkdir指令6.rmdir指令 && rm 指令7.man指令:8.cp指令9.mv指令:10.cat11.more指令12.less指令13.head指令14.tail指令15.时间相关的指令16.Cal指令17…

【Linux】Tomcat 部署及优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Tomcat 部署及优化 一、Tomcat 概述1.Tomcat 介绍2.Tomcat 核心组件3.Tomcat 组件结构4.Tomcat 处理请求过程 二、Tomcat 部署步骤1.关闭防火墙2.安装JDK3.设置JDK环境变量4.…

SQL基础培训16-日期处理

进度16-日期处理-SQL基础培训 知识点(学习作业就是按示例练习一遍): 1、系统当前日期 select getdate() as 当前系统日期 --建表时&

Antd时间轴Timeline遍历数据

Antd时间轴遍历数据 <Timelineitems{data.map((item) > {return { children: item };})}/>

Java实现手动操作定时任务功能的简单例子(动态创建定时任务)

还记得在前公司与同事共同开发一个在页面上统一管理定时提醒任务的功能&#xff0c;实际业务可能会复杂一些&#xff0c;它需要结合小程序或公众号平台对各个用户进行周期性&#xff08;按季度、按月、按日等&#xff09;的消息推送。由于我当时负责的是小程序和公众号平台方面…

node18 + express + mongoose 开发后台服务踩坑记录

模块化 1、node 默认采用 common.js 模块化规范; 2、在 node 中使用 es module 时&#xff0c;需将 package.json 中的 type 改为 module。或者将 .js 文件改为 .mjs。 发布全局 npm cli &#xff08;自定义 npm 脚手架&#xff09; 3、创建一个 npm 脚手架&#xff0c;需创…

Delaunay三角剖分学习笔记

文章目录 Delaunay三角剖分学习笔记1 Voronoi \text{Voronoi} Voronoi图1.1 定义与性质 2 三角剖分2.1 定义与性质2.2 质量(quality)评定标准 3 Delaunay三角剖分3.1 定义3.2 准则与性质 4 Delaunay三角剖分算法4.1 Bowyer-Watson算法4.1.1 算法步骤&#xff1a;4.1.2 算法伪代…

学会这样写代码,一看就是资深工程师,代码简洁之道PHP版本

文章目录 一、前言二、规范2.1 整体结构规范2.1.1 类的括号前括号单独一行2.1.2 方法的前括号单独一行2.1.3 方法内部语句前括号不换行 2.2 变量与常量2.2.1 变量的命名尽量要有语义2.2.2 同一个实体要用相同的变量名2.2.3 尽量使用有语义的常量表述2.2.4 使用自解释型变量2.2.…

六面钻调试第八步Cam参数调试(一)之压轮压板 ,机械规格调试

Cam参数调试 &#xff08;1&#xff09;.压轮压板参数调试 注&#xff1a;压板的规格测量设置 压板的位置相对基准钻的位置设置 &#xff08;2&#xff09;机械规格调试 1.定位气缸的类型 2.活动式定位气缸的Y向宽度 4.定位杆与夹钳Y边缘的最小间隙 5.活动式定位气缸相对基准…

CVPR视频理解论文

Learning Transferable Spatiotemporal Representations from Natural Script Knowledge 时空TransformerCLIP的对比学习思路

if/while/for/语句/分支/路径覆盖的控制流程图+数据流分析(DU)

if/while/for/语句覆盖/分支覆盖/路径覆盖的控制流程图数据流分析(DU) 语句的线性序列Linear Sequences of Statements “If” Constructs “While” Constructs “For” Constructs 语句覆盖率Statement Coverage 测试套件应执行 CFG 的所有节点 也被称为&#xff1a;…

为什么客服系统必备知识库?提高客服效率的秘密武器!

对任何想要成功的企业而言&#xff0c;客户服务是必不可少的。依据提供的客户支持质量&#xff0c;可建立或破坏一个品牌的声誉。为了提供高标准的客户服务&#xff0c;企业必须能够获得可靠的信息&#xff0c;并能够为用户提供快速有效的解决方案。下面&#xff0c;我们就详细…

matlab学习1--基础

文章目录 基本语法保存和加载数组/矩阵矩阵运算 输出多个值绘制向量图 基本语法 和弱语言一样&#xff0c;变量赋值不需要声明类型直接 a 1 2命名规则 以字母开头&#xff0c;并且仅包含字母、数字和下划线 (_) 区分大小写清除命令行窗口 clc保存和加载 保存 保存到xxx.…

python开发构建轻量级卷积神经网络模型实现手写甲骨文识别系统

手写汉字、手写数字、手写字母识别模型都已经做过很多了&#xff0c;但是手写甲骨文识别这个应该都是很少有听说过的吧&#xff0c;今天也是看到这个数据集就想着基于这批手写甲骨文数据集开发构建识别模型&#xff0c;首先来看下效果图&#xff1a; 接下来看下对应使用的数据集…

字典的学习笔记

列表 [] 单身什么是字典 {} 二人世界 python内置的数据结构之一&#xff0c;与列表一样是一个可变序列(可以增删改操作的) 以键值对的方式存储数据&#xff0c;字典是一个无序的序列 -> hash(key) 通过哈希函数来计算存储位置,key一定是不可变的字典的创建 使用花…

读论文-MHFormer

论文&#xff1a;Multi-hypothesis representation learning for transformer-based 3D human pose estimation 摘要 尽管取得了重大进展&#xff0c;但由于深度模糊和自遮挡&#xff0c;从单目视频中估计3D人体姿势仍然是一项具有挑战性的任务。大多数现有的作品都试图通过利用…

驱动程序接口和HAL层区别和联系

驱动程序接口&#xff08;Device Driver Interface&#xff09;和硬件抽象层&#xff08;Hardware Abstraction Layer&#xff0c;HAL&#xff09;是在软件系统中用于处理硬件的两个不同层次的概念。 驱动程序接口&#xff08;Device Driver Interface&#xff09;&#xff1a;…

设计模式(二、三):创建型之工厂方法和抽象工厂模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 目录 一、…