TF数据流图图与TensorBoard

news2025/1/10 5:49:37

2.1 TF数据流图

学习目标

  • 目标
    • 说明TensorFlow的数据流图结构
  • 应用
  • 内容预览
    • 2.1.1 案例:TensorFlow实现一个加法运算
      • 1 代码
      • 2 TensorFlow结构分析
    • 2.1.2 数据流图介绍

2.1.1 案例:TensorFlow实现一个加法运算

2.1.1.1 代码

def tensorflow_demo():
    """
    通过简单案例来了解tensorflow的基础结构
    :return: None
    """
    # 一、原生python实现加法运算
    a = 10
    b = 20
    c = a + b
    print("原生Python实现加法运算方法1:\n", c)
    def add(a, b):
        return a + b
    sum = add(a, b)
    print("原生python实现加法运算方法2:\n", sum)

    # 二、tensorflow实现加法运算
    a_t = tf.constant(10)
    b_t = tf.constant(20)
    # 不提倡直接运用这种符号运算符进行计算
    # 更常用tensorflow提供的函数进行计算
    # c_t = a_t + b_t
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)
    # 如何让计算结果出现?
    # 开启会话
    with tf.Session() as sess:
        sum_t = sess.run(c_t)
        print("在sess当中的sum_t:\n", sum_t)

    return None

注意问题:警告指出你的CPU支持AVX运算加速了线性代数计算,即点积,矩阵乘法,卷积等。可以从源代码安装TensorFlow来编译,当然也可以选择关闭

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

2.1.1.2 TensorFlow结构分析

TensorFlow 程序通常被组织成一个构建图阶段和一个执行图阶段。

在构建阶段,数据与操作的执行步骤被描述成一个图。

在执行阶段,使用会话执行构建好的图中的操作。

  • 图和会话 :
    • 图:这是 TensorFlow 将计算表示为指令之间的依赖关系的一种表示法
    • 会话:TensorFlow 跨一个或多个本地或远程设备运行数据流图的机制
  • 张量:TensorFlow 中的基本数据对象
  • 节点:提供图当中执行的操作

2.1.2 数据流图介绍

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源框架。

节点(Operation)在图中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

2.2 图与TensorBoard

学习目标

  • 目标
    • 说明图的基本使用
    • 应用tf.Graph创建图、tf.get_default_graph获取默认图
    • 知道开启TensorBoard过程
    • 知道图当中op的名字以及命名空间
  • 应用
  • 内容预览
    • 2.2.1 什么是图结构
    • 2.2.2 图相关操作
      • 1 默认图
      • 2 创建图
    • 2.2.3 TensorBoard:可视化学习
      • 1 数据序列化-events文件
      • 2 启动TensorBoard
    • 2.2.4 OP
      • 1 常见OP
      • 2 指令名称

2.2.1 什么是图结构

图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据。

2.2.2 图相关操作

1 默认图

通常TensorFlow会默认帮我们创建一张图。

查看默认图的两种方法:

  • 通过调用tf.get_default_graph()访问 ,要将操作添加到默认图形中,直接创建OP即可。
  • op、sess都含有graph属性 ,默认都在一张图中
def graph_demo():
    # 图的演示
    a_t = tf.constant(10)
    b_t = tf.constant(20)
    # 不提倡直接运用这种符号运算符进行计算
    # 更常用tensorflow提供的函数进行计算
    # c_t = a_t + b_t
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)

    # 获取默认图
    default_g = tf.get_default_graph()
    print("获取默认图:\n", default_g)

    # 数据的图属性
    print("a_t的graph:\n", a_t.graph)
    print("b_t的graph:\n", b_t.graph)
    # 操作的图属性
    print("c_t的graph:\n", c_t.graph)

    # 开启会话
    with tf.Session() as sess:
        sum_t = sess.run(c_t)
        print("在sess当中的sum_t:\n", sum_t)
        # 会话的图属性
        print("会话的图属性:\n", sess.graph)

    return None

2 创建图

  • 可以通过tf.Graph()自定义创建图

  • 如果要在这张图中创建OP,典型用法是使用tf.Graph.as_default()上下文管理器

def graph_demo():
    # 图的演示
    a_t = tf.constant(10)
    b_t = tf.constant(20)
    # 不提倡直接运用这种符号运算符进行计算
    # 更常用tensorflow提供的函数进行计算
    # c_t = a_t + b_t
    c_t = tf.add(a_t, b_t)
    print("tensorflow实现加法运算:\n", c_t)

    # 获取默认图
    default_g = tf.get_default_graph()
    print("获取默认图:\n", default_g)

    # 数据的图属性
    print("a_t的graph:\n", a_t.graph)
    print("b_t的graph:\n", b_t.graph)
    # 操作的图属性
    print("c_t的graph:\n", c_t.graph)

    # 自定义图
    new_g = tf.Graph()
    print("自定义图:\n", new_g)
    # 在自定义图中去定义数据和操作
    with new_g.as_default():
        new_a = tf.constant(30)
        new_b = tf.constant(40)
        new_c = tf.add(new_a, new_b)

    # 数据的图属性
    print("new_a的graph:\n", new_a.graph)
    print("new_b的graph:\n", new_b.graph)
    # 操作的图属性
    print("new_c的graph:\n", new_c.graph)

    # 开启会话
    with tf.Session() as sess:
        sum_t = sess.run(c_t)
        print("在sess当中的sum_t:\n", sum_t)
        # 会话的图属性
        print("会话的图属性:\n", sess.graph)
        # 不同的图之间不能互相访问
        # sum_new = sess.run(new_c)
        # print("在sess当中的sum_new:\n", sum_new)

    with tf.Session(graph=new_g) as sess2:
        sum_new = sess2.run(new_c)
        print("在sess2当中的sum_new:\n", sum_new)
        print("会话的图属性:\n", sess2.graph)

    # 很少会同时开启不同的图,一般用默认的图就够了
    return None

TensorFlow有一个亮点就是,我们能看到自己写的程序的可视化效果,这个功能就是Tensorboard。在这里我们先简单介绍一下其基本功能。

2.2.3 TensorBoard:可视化学习

TensorFlow 可用于训练大规模深度神经网络所需的计算,使用该工具涉及的计算往往复杂而深奥。为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow提供了TensorBoard 可视化工具。

实现程序可视化过程:

1 数据序列化-events文件

TensorBoard 通过读取 TensorFlow 的事件文件来运行,需要将数据生成一个序列化的 Summary protobuf 对象。

# 返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使用
tf.summary.FileWriter('./tmp/summary/test/', graph=sess.graph)

这将在指定目录中生成一个 event 文件,其名称格式如下:

events.out.tfevents.{timestamp}.{hostname}

2 启动TensorBoard

tensorboard  --logdir="./tmp/tensorflow/summary/test/"

在浏览器中打开 TensorBoard 的图页面 127.0.0.1:6006 ,会看到与以下图形类似的图,在GRAPHS模块我们可以看到以下图结构

 

2.2.4 OP

2.2.4.1 常见OP

哪些是OP?

类型实例
标量运算add, sub, mul, div, exp, log, greater, less, equal
向量运算concat, slice, splot, constant, rank, shape, shuffle
矩阵运算matmul, matrixinverse, matrixdateminant
带状态的运算Variable, assgin, assginadd
神经网络组件softmax, sigmoid, relu,convolution,max_pool
存储, 恢复Save, Restroe
队列及同步运算Enqueue, Dequeue, MutexAcquire, MutexRelease
控制流Merge, Switch, Enter, Leave, NextIteration

一个操作对象(Operation)是TensorFlow图中的一个节点, 可以接收0个或者多个输入Tensor, 并且可以输出0个或者多个Tensor,Operation对象是通过op构造函数(如tf.matmul())创建的。

例如: c = tf.matmul(a, b) 创建了一个Operation对象,类型为 MatMul类型, 它将张量a, b作为输入,c作为输出,,并且输出数据,打印的时候也是打印的数据。其中tf.matmul()是函数,在执行matmul函数的过程中会通过MatMul类创建一个与之对应的对象

# 实现一个加法运算
con_a = tf.constant(3.0)
con_b = tf.constant(4.0)

sum_c = tf.add(con_a, con_b)

print("打印con_a:\n", con_a)
print("打印con_b:\n", con_b)
print("打印sum_c:\n", sum_c)

打印语句会生成:

打印con_a:
 Tensor("Const:0", shape=(), dtype=float32)
打印con_b:
 Tensor("Const_1:0", shape=(), dtype=float32)
打印sum_c:
 Tensor("Add:0", shape=(), dtype=float32)

注意,打印出来的是张量值,可以理解成OP当中包含了这个值。并且每一个OP指令都对应一个唯一的名称,如上面的Const:0,这个在TensorBoard上面也可以显示

请注意,tf.Tensor 对象以输出该张量的 tf.Operation 明确命名。张量名称的形式为 "<OP_NAME>:<i>",其中:

  • "<OP_NAME>" 是生成该张量的指令的名称
  • "<i>" 是一个整数,它表示该张量在指令的输出中的索引

2.2.4.2 指令名称

tf.Graph对象为其包含的 tf.Operation对象定义的一个命名空间。TensorFlow 会自动为图中的每个指令选择一个唯一名称,用户也可以指定描述性名称,使程序阅读起来更轻松。我们可以以以下方式改写指令名称

  • 每个创建新的 tf.Operation 或返回新的 tf.Tensor 的 API 函数可以接受可选的 name 参数。

例如,tf.constant(42.0, name="answer") 创建了一个名为 "answer" 的新 tf.Operation 并返回一个名为 "answer:0" 的 tf.Tensor。如果默认图已包含名为 "answer" 的指令,则 TensorFlow 会在名称上附加 "1"、"2" 等字符,以便让名称具有唯一性。

  • 当修改好之后,我们在Tensorboard显示的名字也会被修改
a = tf.constant(3.0, name="a")
b = tf.constant(4.0, name="b" )

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

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

相关文章

CMMI对企业有什么价值,如何高效落地?

1、获得权威认证 CMMI是全球性软件与系统工程行业的唯一权威认证&#xff0c;是对企业软件研发与能力服务的认可。 CMMI企业价值 CoCode项目管理全面支持CMMI3-5级高效落地​ 2、降本增效&#xff0c;提高企业能力。 CMMI对软件开发过程进行规范化梳理&#xff0c;保证软…

虚拟机ubuntu系统内存满,无法进入桌面,扩展内存

1、 关闭虚拟机&#xff0c;在虚拟机设置中将原先20GB扩展到30GB 注意&#xff1a;有快照需要删除快照后才能扩展 2、命令行进入ubuntu 内存满了&#xff0c;无法进入Ubuntu图形界面 按下ctrlaltf2~f6组合键 输入用户名和密码进入命令行模式 3、删除一些东西 删除回收站…

vuex的modules和辅助函数

一、回顾&#xff1a;vuex状态管理器1、版本问题&#xff1a;vue2对应的是vuex3&#xff1b;vue3对应的vuex42、vuex作用&#xff1a;每个vuex中都有一个Store(仓库)&#xff0c;用于管理vue项目中用到的状态变量&#xff08;属性&#xff09;。vuex维护的是一个单一的状态树vu…

工作常用cron总结

一、cron表达式详解 corn从左到右&#xff08;用空格隔开&#xff09;&#xff1a; 秒 分 小时 日 月 周 (星期中的日期&#xff0c;1代表周日&#xff0c;7代表周六) 年 定时任务统计 数据同步 0 0 10 * * &#xff1f; 每天上午10点触发…

Spring 整合Mybatis。

目录 一、环境准备 1、Mybatis 环境 2、整合思路分析 二、Spring整合Mybatis 三、Spring整合Junit 一、环境准备 1、Mybatis 环境 ▶ 步骤1 : 准备数据库表 Mybatis是来操作数据库表&#xff0c;所以先创建一个数据库及表 create database spring_db character set utf8; …

LeetCode刷题系列 -- 1008. 前序遍历构造二叉搜索树

给定一个整数数组&#xff0c;它表示BST(即 二叉搜索树 )的 先序遍历 &#xff0c;构造树并返回其根。保证 对于给定的测试用例&#xff0c;总是有可能找到具有给定需求的二叉搜索树。二叉搜索树 是一棵二叉树&#xff0c;其中每个节点&#xff0c; Node.left 的任何后代的值 严…

JVM的理解(垃圾回收算法和类加载过程)

文章目录1、JVM的位置2、JVM的体系结构3、JVM组件3.1、类加载器&#xff08;加载class文件&#xff09;3.1.1、类加载器的执行步骤3.2、PC寄存器3.3、方法区3.4、栈3.5、堆4、GC算法4.1、引用计数法4.2、复制算法1、模型2、原理图4.3、标记清除4.4、标记压缩总结&#xff1a;1、…

2023年了学Java还能找到工作么?

Java人才需求缺口巨大 为何还有人找不到工作&#xff1f; 近两年&#xff0c;传统企业开始数字化转型&#xff0c;各企业对互联网IT技术人才呈现井喷趋势。对于进可攻前端、后可守后端的Java程序员而言&#xff0c;市场对他们青睐有加&#xff0c;薪资更是水涨船高。然而在…

Cesium 本地化部署和新增sandcastle案例

源码下载git clone https://gitee.com/mirrors-gis/cesium.gitcd cesium npm install // or yarn install构建 因为下载的源码,还没有构建出cesium的api,以及api对应的文档 ,如果此时直接运行 npm start ,会启动一个8080端口的一个服务,通过 http://localhost:8080 可以看…

SpringCloud Alibaba_Nacos服务注册和配置中心

目录一、Nacos简介1.为什么叫Nacos2.是什么3.能干嘛4.去哪下5.各种注册中心比较二、安装并运行Nacos三、Nacos作为服务注册中心演示1.官网文档2.基于Nacos的服务提供者3.基于Nacos的服务消费者4.服务注册中心对比4.1 Nacos和CAP4.2 Nacos支持AP和CP模式的切换四、Nacos作为服务…

sonar的安装以及使用

sonar的安装以及使用简介1. sonar是什么2. SonarQube与Sonar安装1.下载sonarqubexxx.zip并且解压即可:2.配置数据库3.重启sonarQube会自动建表。使用1.下载sonar-scanner:(这个工具是对源码进行扫描&#xff0c;并将结果保存到数据库以便用上面的sonarqube进行分析)2.配置mysql…

Spring Cloud 以及 Spring Cloud Alibaba 使用总结

title: Spring Cloud 以及 Spring Cloud Alibaba 使用总结 date: 2023-01-13 11:54:15 tags: Spring categories:Spring cover: https://cover.png feature: false 1. 版本对应 官网版本说明&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki (github.com) 这里使用 …

通过应用场景深度理解监控宝在业务中的实践价值

近年来&#xff0c;越来越多的企业实现了核心业务系统互联网化&#xff0c;无论是企业内部员工还是企业外部用户或是供应链上下游合作伙伴&#xff0c;均通过互联网和Web应用与企业建立起了紧密的联系。基于此&#xff0c;网络性能对企业业务的影响也变得越来越重要&#xff0c…

阿里云服务器使用docker部署springboot+mysql+redis项目

首先&#xff0c;由于springboot中使用的内置的tomcat&#xff0c;需要讲将ttp转为https的自行搜索博客把&#xff1a; 步骤大概是再阿里云上注册免费SSL证书&#xff0c;下载证书后 拖到项目资源目录下&#xff0c;配置application.properties相关属性 下面引出博客主要内容……

校园网免认证上网的方法

很多时候&#xff0c;当流量不够用时&#xff0c;看着周围那么多热点又连不上&#xff0c;是不是有点心痒痒呢&#xff1f;那么有没有办法不需要要通过这些热点的认证即可上网呢&#xff1f;当然是有的。另外在此强调一点&#xff0c;本教程仅用于学习测试用途&#xff0c;请勿…

【靶机】vulnhub靶机my_file_server2

靶机下载地址&#xff1a;My File Server: 2 ~ VulnHubip&#xff1a;192.168.174.144Kali&#xff1a;192.168.174.128使用arp-scan扫描到ip是使用nmap扫描开放的端口信息&#xff0c;发现靶机开放端口信息如下21端口ftp服务&#xff0c;允许匿名&#xff08;anonymous&#x…

编译安装nacos集群部署

Nacos 基于 java 开发的&#xff0c;运行依赖于 java 环境。依赖 64 bit JDK 1.8服务器准备&#xff1a;192.168.11.139、192.168.11.141、192.168.11.142 1.首先上传jdk的包 三台都操作tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包cd /usr/local/ 切换至解…

计算机图形学 第9章 自由曲线曲面

第8章不学 目录 # 学习目标 # 消隐 ## 定义 1.线框模型 2.表面模型 3.实体模型 双表结构 定义三维顶点类 定义表面类 读入立方体的点表 读入立方体的面表 1.柏拉图多面体 柏拉图多面体对偶性 正四面体 正八面体 正十二面体 黄金数 黄金矩形 黄金三角形 光滑物体 …

Spring Bean 的生命周期

文章目录一、前言二 、Bean 的生命周期2.1 Bean 的定义信息2.2 Bean 的创建2.3 Bean 的使用2.4 Bean 的销毁2.5 循环依赖2.5.1 什么是循环依赖2.5.2 Spring 解决循环依赖2.5.2.1 三级缓存2.5.2.2 提前暴露2.5.3 注意2.5.3.1 三级缓存结构中 map 分别存储什么类型对象2.5.3.2 三…

JVM-内存与垃圾回收-1.JVM与Java体系结构

1.JVM与Java体系结构 1. JVM&#xff1a;跨语言的平台 Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了&#xff0c;它更是一个平台、一种文化、一个社区。 ● 作为一个平台&#xff0c;Java虚拟机扮…