30天从入门到精通TensorFlow1.x 第四天,TensorFlow中的计算图或数据流图

news2024/11/17 16:23:21

文章目录

  • 一、接前一天
  • 二、计算图或数据流图
    • 1. 什么是计算图或者数据流图
    • 2. 为什么需要计算图或者数据流图
    • 3. 执行顺序和延迟加载在tf中的使用

一、接前一天

这几天主要学习了张量的创建方法,以及变量变量命名域共享变量等概念。今天主要熟悉 数据流图或者计算图的概念

二、计算图或数据流图

1. 什么是计算图或者数据流图

(1). 计算图是tf基本计算单位之一,与张量一样都是基本的计算单位。
(2). tensorflow1中的数据流图,也被称为计算图,是一种用于表示机器学习模型的抽象概念。它由节点(Nodes)边(Edges)组成,其中节点代表操作或变量表示它们之间的依赖关系

当我们定义了一个tensorflow1的计算图后,我们可以使用tensorflow提供的Session对象对其进行计算。Session会将计算图中依赖关系解析出来,实现节点之间的数据流动,并最终生成输出结果。

在计算图中,每个节点可以接受零个或多个输入,并产生零个或多个输出每个输出都可以被视为一个张量(tensor),因此tensorflow的名字也正是由此而来。

通过这种方式,tensorflow将复杂的计算过程抽象成为一个图形结构,使得我们可以更加直观地理解模型的结构和逻辑,方便进行优化和调试。

例如:定义一个 加法

在这里插入图片描述
节点表示操作(包括变量的创建、张量的数学运算、卷积操作等)表示操作之间的依赖关系。这里就是说在执行输出y之前需要执行 输入阶段和add节点。

节点可以接收零个或多个输入,产生零个或多个输出,每个输出又可以被视为一个tensor(张量)。在tensorflow中,张量是一种具有特定形状(shape)数据类型(dtype)多维数组,可以用来存储数据。

(3). 计算图上有两种操作

  1. 构建计算图
    创建api:
graph = tf.get_default_graph()
  1. 运算计算图

使用tensorflow提供的Session对象对其进行计算

2. 为什么需要计算图或者数据流图

  1. 可以高效地计算模型的前向传递和反向传播:TensorFlow使用数据流图来表示计算模型,它可以自动地计算模型的前向传递和反向传播。数据流图将计算过程划分为一系列节点(Nodes)和边缘(Edges),每个节点代表一个操作或函数,而边缘则表示节点间的依赖关系。TensorFlow可以通过在数据流图中进行迭代、优化和求导等操作,高效地计算模型的输出值和梯度。

  2. 可以实现延迟加载和分布式计算:TensorFlow支持延迟加载机制,这意味着它只有在需要时才会计算节点的值,而不是在图构建阶段就立即计算。这种机制可以降低内存占用和计算量,提高计算效率和灵活性,并且允许动态调整计算图结构和参数。同时,数据流图还可以方便地实现分布式计算,从而充分利用多台机器的计算资源,加速计算过程。

  3. 可以轻松地构建复杂的计算模型:TensorFlow提供了丰富的API,可以帮助用户轻松地构建各种复杂的计算模型,包括神经网络、卷积神经网络、循环神经网络等。通过在数据流图中添加不同类型的节点和边缘,用户可以描述具有各种功能和性能的计算模型,并利用TensorFlow高效地训练和优化这些模型。

例如

import tensorflow as tf

# 定义两个向量
a = tf.constant([1.0, 2.0, 3.0], name="a")
b = tf.constant([4.0, 5.0, 6.0], name="b")

# 定义向量加法操作
c = tf.add(a, b, name="add")

# 创建Session并执行图上的操作
sess = tf.Session()
result = sess.run(c)
print(result)

# 关闭Session
sess.close()

在这行代码中,我创建两个常量,并执行add操作。因为没有使用with模块,因此最后需要 .close()操作.
注意
TensorFlow会自动创建默认的数据流图,用户不需要显式的使用graph = tf.get_default_graph()创建。用户使用tf中的操作时候,都会自动添加到默认的计算图中。但是在多图中就要进行显式的创建

使用附带with模块的不需要.close()操作。

import tensorflow as tf

#y = wx + b

w = tf.Variable([0.3],dtype=tf.float32)
b = tf.Variable([-3],dtype=tf.float32)

x = tf.placeholder(tf.float32)

y = w*x + b
out = 0

with tf.Session() as sess:
    tf.global_variables_initializer().run()

    out = sess.run(y,{x:[1,2,3,4]})

print('out:',out)

3. 执行顺序和延迟加载在tf中的使用

  1. 执行顺序:在计算图中,每个节点代表了一个计算操作或函数,并且它们之间通过边连接来表示数据依赖关系。当计算图被执行时,节点将按照它们的输入输出以及边的顺序进行计算,并将它们的结果传递给它们所连接的节点。因此,计算图中的执行顺序通常是确定的,且与节点的位置形状颜色等外部特征无关

  2. 延迟加载:有些计算图框架支持延迟加载机制,即只有在需要时才计算节点的值,而不是在图构建阶段就立即计算。这种机制可以降低内存占用计算量,提高计算效率灵活性,并且允许动态调整计算图结构和参数。具体来说,当我们使用计算图框架构建模型时,只需要定义节点之间的依赖关系和计算规则,而不需要显式地指定每个节点的值。然后,当我们需要计算某个节点的值时,框架会自动递归地计算该节点所依赖的所有节点,并返回最终结果。这种机制类似于Python中的惰性求值(lazy evaluation),可以大大简化编程和调试过程。

例如:
我们想要控制图中节点的执行顺序,可以通过tf.Graph.control_dependencises()函数来实现:
比如:计算节点a,b,c,d希望在执行ab之前执行cd

with graph_variable.control_dependcies([c,d]):
	pass

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

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

相关文章

网络隔离的生物制药企业,怎样实现安全的跨网文件交换?

在数字时代,生物制药企业结合现代技术追求和实现生物科技领域上的突破,研发及生产出更多满足人体健康需求的药物及医疗技术。由于生物制药企业,在进行某一领域的科研时通常周期较长、且涉及很多创新性成果,因此,科研数…

css:CSS 线性渐变linear-gradient

CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。 CSS 定义了两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线)径向渐变(由其中心定义) 参考文档 CSS 线性渐变 https://www.w3school.com.cn/css/css3_…

访问学者带孩子去美国何时入境最好?

访问学者带孩子去美国入境的最佳时间会受到多种因素的影响,例如孩子的学校安排、访问学者的工作计划以及家庭的个人喜好。然而,以下是知识人网小编整理的一些常见考虑因素: 1. 学校假期:如果孩子正在就读学校,最佳时间…

uniapp 打包app wgt热更新和整包更新以及更新弹窗动画

app热更新是app项目最常见的功能,接下来我总结了当时做这个功能的过程,来交流学习一哈 热更新的流程步骤 在用户进入app就获取当前版本号与调用后端接口返回的版本号对比是否是最新的版本不是最新弹出弹窗让用户确认是否更新,点击更新下载w…

财务创造价值,如何降本增效?

一、整体成本管控理论 有财务人员可能认为这和我们财务有什么关系,这和财务管理也没有关系。我们经常提到的业务财融合以及成本BP,其实在这里面是需要发挥应有的价值的。如何理解这个问题?无论是老板还是财务人员,一是有财务管理…

2023年测试人前景归途?我主攻自动化测试拿到了25k的offer...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

LeetCode_双指针_中等_86.分隔链表

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。 示例 1&…

JavaEE(系列19) -- 计算机网络初识

目录 1. 网络发展史 2. IP地址和端口号 3. 协议 4. 五元组 6. 协议分层 6.1 OSI 七层模型 6.2 TCP/IP五层(或四层)模型 7. 协议分层(网络数据传输过程) 7.1 应用层 7.2 传输层(进入了操作系统内核) 7.3 网络层 7.4 数据链路层 7.5 物理层 声明:本文内…

【CSS3+HTML5+JQUERY】------ 实现环形进度条实例代码-(已简单封装)

1. JavaScript代码 circle.js文件: 简单的封装了一下 直接调用方法即可 (function ($$) {var lyCircle {};lyCircle.options{timer:20,circleLeft:.ly-circle-left,elements:"",circleRight:".ly-circle-right",percentSum:0,//百分比bgColor:#00a7ff,bor…

stable diffusion中的u net

Stable Diffusion 包含几个核心的组件: 一个文本编码器(在 Stable Diffusion 中使用 CLIP 的 ViT-L/14 的文本编码器),用于将用户输入的 Prompt 文本转化成 text embedding;一个 Image Auto Encoder-Decoder&#xff…

大模型核心技术原理: Transformer架构详解

在大模型发展历程中,有两个比较重要点:第一,Transformer 架构。它是模型的底座,但 Transformer 不等于大模型,但大模型的架构可以基于 Transformer;第二,GPT。严格意义上讲,GPT 可能…

【学习笔记】Python核心技术与实战-基础篇-03列表和元组,到底用哪个?

目录 列表和元组基础概念区别列表和元组的基础操作和注意事项列表和元组存储方式的差异列表和元组的性能列表和元组的使用场景总结思考题 列表和元组基础 概念 列表和元组,都是一个可以放置任意数据类型的有序集合。 在绝大多数编程语言中,集合的数据类…

C++算法:排序之二(归并、希尔、选择排序)

C算法:排序 排序之一(插入、冒泡、快速排序) 排序之二(归并、希尔、选择排序) 文章目录 C算法:排序二、比较排序算法实现4、归并排序5、希尔排序5、选择排序 原创文章,未经许可,严禁…

从vue2到vue3的生命周期

1.vue2 在vue2.x中的生命周期为 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed activated deactivated errorCaptured 在vue3中,新增了一个setup生命周期函数,setup执行的时机是在beforeCreate生命函数之前…

count(0)、count(1)和count(*)、count(列名) 的区别

当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 count(1)、count(*)、count(字段) 等。 到底哪种效率是最好的呢?是不是 count(*) 效率最差? 一.…

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用 🔻一、数据库创建、删除、选择1.1 🍃 create database 创建数据库1.2 🍃 使用 mysqladmin 创建数据库1.3 🍃 drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令…

公司招人面试了一个00后,绝对能称为是内卷届的天花板

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员,他…

【商品页面详情页+商品评论】API接口技术交流,封装接口

商品详情API接口数据:提供了商品的基本信息,包括商品名称、描述、规格、价格、销量、库存等信息。此外,也可以通过提供的API接口来获取商品的图片、评价、物流信息等详细数据。 商品评论接口是消费者对商品所进行的客观评价 电商API的应用价…

使用geoserver发布shp和tiff数据

一、安装并启动geoserver服务 1.1 下载geoserver 进入官网下载 由于geoserver是使用Java语言开发的,所以运行需要java的环境,不同geoserver的版本号对java的版本要求不同,所以选择版本时需注意对应java的版本要求,由于我本地安…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置,注意路径不一样,访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…