Tensorflow1架构内核和学习方法论

news2024/12/28 5:53:35

目录

概念简介

总体介绍

名词解释

疑问辨析

工程构建

代码生成

技术栈

模型类型

系统架构

分层架构

图控制

运行机制

会话机制 

队列

运行模型

本地模式

分布式模式

技能方法论 

发现领域模型

挖掘系统架构

细节是魔鬼

适可而止

发现她的美

形式化

独乐乐,不如众乐乐

更新知识

 专攻术业


概念简介

总体介绍

TensorFlow的主要作用是构建和训练复杂的机器学习模型,提供高效的并行计算能力,可视化训练过程,支持多种编程语言以及跨平台计算。这些特点使得TensorFlow成为目前炙手可热的深度学习框架之一。

TensorFlow是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库。它使用节点表示抽象的数学计算,并使用 OP 表达计算的逻辑;而边表示节点间传递的数据流, 并使用 Tensor 表达数据的表示。数据流图是一种有向无环图 (DAG),当图中的 OP 按照特定的拓扑排序依次被执行时,Tensor 在图中流动形成数据流,TensorFlow 因此而得名。

名词解释

OP,即Operation,是计算图中的一个节点,代表一个计算单元。在深度学习中,OP可以表示数据流图中的操作,如卷积、池化等。

Kernel , 是 OP 在某种硬件设备的特定实现,它负责执行 OP 的具体运算,

疑问辨析

问:Kernel,又称核函数是不是就是卷积核的意思?

答:Kernel并不等同于卷积核。在计算机视觉和深度学习中,Kernel和卷积核虽然都用于实现某种特定运算,但它们并不完全相同。

Kernel是操作(如卷积、池化等)在某种硬件设备的特定实现,它负责执行操作的具体运算。在深度学习中,每个Kernel对应一个特定的卷积核或权重矩阵。

卷积核则是卷积神经网络中的特定计算单元,它与输入数据在卷积过程中进行特定运算,用于提取输入数据的特定特征。卷积核是一个小型矩阵,它可以遍历输入数据的每个局部区域,并对这些区域进行特定的运算(如点积)。

工程构建

TensorFlow 使用 C++11 语法实现, 所以要保证安装 C++ 编译器要支持 C++11。另外TensorFlow 使用 Bazel 的构建工具, 可以将其视为更高抽象的 Make 工具。不幸的是,Bazel 使用 Java8 实现,其依赖于 JDK。 因此在安装 Bazel 之前,还得需要事先安装 1.8 及以上版本的 JDK。

代码生成

在构建 TensorFlow系统时,Bazel 或 CMake会自动生成部分源代码。理解代码生成器 的输出结果,可以加深理解系统的行为模式。

技术栈

模型类型

在TensorFlow中,可以构建单层感知器模型、多层感知器模型和卷积神经网络模型等。

单层感知器:单层感知器是最简单的神经网络形式,它只有一层神经元,用于对输入数据进行二分类或回归分析。


多层感知器:多层感知器是单层感知器的扩展,它有多层神经元,每层神经元之间相互连接,形成一个层次结构。通过训练,多层感知器可以学习复杂的模式和特征,并用于解决更复杂的分类和回归问题。


卷积网络:卷积网络是一种特殊的神经网络,特别适合处理具有网格结构的数据,如图像。它的基本单元是卷积核或过滤器,这些卷积核可以在输入数据上滑动,并对覆盖区域进行局部连接和计算。卷积网络可以进行特征提取、空间变换、边缘检测等任务,它广泛用于计算机视觉和深度学习中。

系统架构

TensorFlow的系统结构以 C  API 为界,将整个系统分为前端和后端两个子系统。
1.    前端系统:提供编程模型,负责构造计算图;
2.    后端系统:提供运行时环境,负责执行计算图。

分层架构

TensorFlow的系统设计遵循良好的分层架构,后端系统的设计和实现可以进一步分解为4层。

1.    运行时:分别提供本地模式和分布式模式,并共享大部分设计和实现;
2.    计算层:由各个 OP  的 Kernel  实现组成;在运行时,Kernel  实现执行 OP  的具 
体数学运算;
3.    通信层:基于 gRPC  实现组件间的数据交换,并能够在支持 IB  网络的节点间实 
现 RDMA  通信;
4.    设备层:计算设备是 OP  执行的主要载体,TensorFlow  支持多种异构的计算设备 
类型。

TensorFlow 支持 Python 和 C++ 的编程接口较为完善,尤其对 Python 的 API 支持最为全面。并且,对其他编程语言的 API 支持日益完善。

图控制

在TensorFlow中,图控制包括图构建、图执行和图优化等方面。通过图控制,可以构建复杂的机器学习模型,并实现高效的并行计算和可视化训练过程。

运行机制

会话机制 

TensorFlow的会话(Session)机制是用于实际执行计算图的关键部分。计算图在构建阶段定义了模型的结构和计算关系,而会话则负责在执行阶段将这些计算分配给适当的计算设备(如CPU、GPU或TPU等)并执行它们。

会话的生命周期包括会话的创建,创建计算图,扩展计算图,执行计算图,关闭会话, 销毁会话的基本过程。在前端 Python  和后端 C++  表现为两套相兼容的接口实现。

队列

队列在模型训练中扮演重要角色,后文将讲述数据加载的 Pipeline,训练模型常常使用 RandomShuffleQueue 为其准备样本数据。为了提高 IO 的吞吐率,可以使用多线程,并发地将样本数据追加到样本队列中;与此同时,训练模型的线程迭代执行 train_op 时,一次获取 batch_size 大小的批次样本数据。显而易见,队列在 Pipeline  过程中扮演了异步协调和数据交换的功能,这给 Pipeline 的设计和实现带来很大的弹性空间。

运行模型

本地模式

图操作

 

分布式模式

图操作

技能方法论 

发现领域模型

领域模型是阅读代码最重要的一个目标,因为领域模型是系统的灵魂 所在。通过代码阅读,找到系统本质的知识,并通过自己的模式表达出来,才能真正地抓住系统的脉络,否则一切都是空谈。

例如,在阅读 TensorFlow 的 Python  实现的客户端代码时,理顺计算图的领域模型, 对于理解 TensorFlow  的编程模型,及其系统运行时的行为极其重要。

领域对象:Graph

 

挖掘系统架构

阅读代码犹如在大海中航行,系统架构图就是航海图。阅读代码不能没有整体的系统概念,否则收效不佳,阅读质量大大折扣。必须拥有系统思维,并明确目标。

细节是魔鬼

纠结于细节,将导致代码阅读代码的效率和质量大大折扣。例如,日志打印,解决某个 Bug  的补丁实现,某版本分支的兼容方案,某些变态需求的锤子代码实现等等。

阅读代码的一个常见的反模式就是「给代码做批注」。这是一个高耗低效,投入产出比极低的实践。一般地,越是优雅的系统,注释越少;越是复杂的系统,再多的注释也是于事无补。

适可而止

个人阅读代码的时候,函数调用栈深度绝不超过 3,然后使用抽象的思维方式思考底 层的调用。因为我发现,随着年龄的增长,曾今值得骄傲的记忆力,现在逐渐地变成自己的 短板。当我尝试追踪过深的调用栈之后,之前的阅读信息完全地消失记忆了

发现她的美

当我发现一个好的设计时,我会尝试使用类图,状态机,序列图等方式来表达设计;如果发现潜在的不足,将自己的想法补充进去,将更加完美。

形式化

当阅读代码时,有部分人习惯画程序的「流程图」。相反,我几乎从来不会画「流程图」, 因为流程图反映了太多的实现细节,而不能深刻地反映算法的本质。

我更倾向于使用「形式化」的方式来描述问题。它拥有数学的美感,简洁的表达方式, 
及其高度抽象的思维,对挖掘问题本质极其关键。

例如,对于 FizzBuzzWhizz 的问题,相对于冗长的文字描述,或流程图,形式化的方式将更加简单,并富有表达力。以 3, 5, 7 为输入,形式化后描述后,可清晰地挖掘出问题 
的本质所在。

独乐乐,不如众乐乐

与他人分享你的经验,也许可以找到更多的启发;尤其对于熟知该领域的人沟通,如果是 Owner  就更好了,肯定能得到意外的惊喜和收获。 

要让别人信服你的观点,关键是要给别人带来信服的理由。分享的同时,能够帮助锻炼自己的表达能力,这需要长时间的刻意练习。

使用图表来总结知识,一方面图的表达力远远大于文字;另外,通过画图也逼迫自己能够透彻问题的本质

更新知识

我们需要常常更新既有的知识体系,尤其我们处在一个知识大爆炸的时代。我痛恨那些信守教条的信徒

 专攻术业

人的精力是有限的,一个人不可能掌握住世界上所有的知识。与其在程序设计语言的 
抉择上犹豫不决,不如透彻理解方法论的内在本质;与其在众多框架中悬而未决,不如付出实际,着眼于问题本身。总之,博而不精,不可不防

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

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

相关文章

代码随想录算法训练营 60天总结

emmmm,总结怎么写呢。 暑假和高中一个同学聊天,因为都参加了蓝桥杯,我连省三也没有,同学竟然省一然后去北京参加国赛获得国三,就问问他学习编程的方法。他推荐我加入了知识星球里的代码随想录,里面有学习路线还有好多讨…

LVS: ambighouse pin count in file “xx“ but none has xx pins问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 一些foundry的standard cell的cdl没有衬底pin(例如VNW VPW),如果pr过程中globalNetConnect 或者connect_pg_net把衬底pin接到power/ground n…

Qt5开发及实例V2.0-第二十二章-Qt.Quick Controls 2新颖界面开发

Qt5开发及实例V2.0-第二十二章-Qt.Quick Controls 2新颖界面开发 第22章 Qt Quick Controls 2新颖界面开发22.1 Qt Quick Controls 2简介22.1.1 第一个Qt Quick Controls 2程序22.1.2 Qt Quick Controls 2程序的构成 22.2 Qt Quick Controls 2与1的比较22.2.1 ApplicationWindo…

ElementUI实现登录注册+axios全局配置+CORS跨域

一、搭建项目 1.1 安装 Element-UI 先确保是否安装了vue-cli脚手架工具 !!! 安装vue脚手架可以看看我的上一篇博客 构建好项目后通过npm安装element-ui cd 项目根路径 #进入新建项目的根目录 npm install element-ui -S #安装…

MySQL简介以及安装和部署(Linux)

MySQL简介 MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。 目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低&…

C#__简单使用TCP/UDP发送消息

Socket(套接字、插口) TCP和UCP的区别: 1、基于连接和无连接 2、对系统资源的要求(TCP较多,UCP少) 3、UDP程序结构简单 4、流模式和数据报模式 5、TCP保证数据正确性和数据先后顺…

【腾讯云国际站】CDN内容分发网络特性介绍

为什么使用腾讯云国际站 CDN 内容分发网络? 当用户直接访问源站中的静态内容时,可能面临的体验问题: 客户离服务器越远,访问速度越慢。客户数量越多,网络带宽费用越高。跨境用户访问体验较差。 腾讯云国际站CDN 如何改…

yum和vim工具的使用

目录 yum工具的使用 yum下载原理 软件的查找&下载&删除操作 查找lrzsz软件(文件上传或者下载软件) 下载lrzsz软件 删除lrzsz软件 vim工具的使用 vim命令模式 命令模式与光标相关的快捷键: 插入模式 底行模式 在本次的博客当中我们主要…

C#/Unity3D 单例模板(单例属性模板)

C# 单例单例属性 不做过多解释&#xff0c;非面向大众 using System; namespace EasyAVG {public static class SingletonProperty<T> where T : class{private static readonly object locker new object();private volatile static T instance null;public static…

一篇文章成为递归大神:MySQL递归查询(with recursive)

理论原理 1、MySQL with Recursive是什么&#xff1f; MySQL with Recursive是一种基于递归思想的MySQL查询方式&#xff0c;可以实现对数据的递归查询和处理&#xff0c;返回符合条件的数据。在MySQL 8.0版本中&#xff0c;该功能被正式引入。 2、MySQL with Recursive有什么…

【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码

1 mpl_toolkits.mplot3d 功能介绍 mpl_toolkits.mplot3d 是 Matplotlib 库中的一个子模块&#xff0c;用于绘制和可视化三维图形&#xff0c;包括三维散点图、曲面图、线图等。它提供了丰富的功能来创建和定制三维图形。以下是 mpl_toolkits.mplot3d 的主要功能和功能简介&am…

xxe攻击(XML外部实体)

1.定义 XML用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义&#xff08;可选&#xff09;、文档元素。 http://www.w3school.com.…

Spring学习笔记9 SpringIOC注解式开发

Spring学习笔记8 Bean的循环依赖问题_biubiubiu0706的博客-CSDN博客 注解的存在主要是为了简化XML的配置.Spring6倡导全注解式开发 回顾下 注解怎么定义,注解中的属性怎么定义 注解怎么使用 通过反射机制怎么读取注解 注解的自定义 注解的使用 通过反射机制怎么读取注解 I…

顺序表的实现和练习

杂谈&#xff1a; 有些数据结构&#xff08;C语言实现&#xff09;的教材/教程中会使用C中引用的语法&#xff0c;引用确实在形式上比指针简洁&#xff0c;这样做无非是为了避免后续对二级指针的使用。 我认为既然使用C语言实现数据结构&#xff0c;那么指针就不应该是门槛。…

【动手学深度学习-Pytorch版】序列到序列的学习(包含NLP常用的Mask技巧)

序言 这一节是对于“编码器-解码器”模型的实际应用&#xff0c;编码器和解码器架构可以使用长度可变的序列作为输入&#xff0c;并将其转换为固定形状的隐状态&#xff08;编码器实现&#xff09;。本小节将使用“fra-eng”数据集&#xff08;这也是《动手学习深度学习-Pytor…

[论文分享] How to Better Utilize Code Graphs in Semantic Code Search?

How to Better Utilize Code Graphs in Semantic Code Search? [ESEC/FSE 2022] 语义代码搜索极大地促进了软件的重用&#xff0c;使用户能够找到与用户指定的自然语言查询高度匹配的代码片段。由于代码图(如控制流图和程序依赖图)丰富的表达能力&#xff0c;两种主流的研究工…

【Gradle-9】Gradle插件发布指南

1、前言 不管是在公司内部&#xff0c;还是开源&#xff0c;Gradle插件发布都是一项必备的技能&#xff0c;本文主要介绍本地发布和远端发布两种方式。 2、本地发布 2.1、添加依赖 在plugin>build.gradle文件中&#xff08;插件的项目&#xff09;先依赖一个maven发布的…

分布式搜索引擎Elasticsearch

一、Elasticsearch介绍 1.Elasticsearch产生背景 大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么 一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎 Elasticsearch使用Java开发…

零基础也能制作小说推文视频,输入文案就能制作推文短视频

小说推文视频一直是各类写手们追捧的创作方式之一&#xff0c;而如何制作出优质、吸引人的小说推文视频成了许多人关注的焦点。幸运的是&#xff0c;现在有了一款名为推文视频制作神器&#xff0c;让制作小说推文视频变得轻松简单。 这款小说推文视频神器的功能十分强大&#…

山西电力市场日前价格预测【2023-09-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-25&#xff09;山西电力市场全天平均日前电价为442.30元/MWh。其中&#xff0c;最高日前电价为720.46元/MWh&#xff0c;预计出现在19: 00。最低日前电价为276.06元/MWh&#xff0c;预计…