第二章 Tensorflow基础
1. 2.1 Tensorflow基础第1节
ppt page 1: 大家好,接下来给大家讲解一下第2章 TensorFlow基础 第1节,主要有以下两部分内容: 1、 Tensorflow基础框架 2、 Tensorflow源码结构分析
ppt page 2: 本节学习目标; 1、了解Tensorflow基础框架 2、了解Tensorflow源码结构
ppt page 3: Tensorflow系统框架分为三层,由上而下依次是应用层、接口层和Tensorflow核心层,如下图所示:
1. 应用层 应用层是TensorFlow框架的最上层,主要提供了机器学习相关的训练库、接口库以及针对Python、C++和Java等编程语言的编程环境,便于不同编程语言在应用层通过接口层调用TensorFlow核心功能以实现相关实验和应用。可以将应用层理解为系统的前端,这样便于使用Python等语言进行编程,主要实现对计算图的构造。 2、接口层 接口层是对TensorFlow功能模块的封装,便于其他语言平台调用 3、核心层 核心层是TensorFlow进行运算学习的最重要部分,包括设备层、网络层、数据操作层和计算层。可以将核心层理解为系统的后端,它对前端提出的计算命令进行具体的计算 (1) 设备层 设备层主要包括TensorFlow在不同硬件设备上的实现,主要支持CPU、GPU和Mobile等不同设备。通过在不同的硬件设备上实现计算命令转换,给上层提供统一的接口,实现程序的跨平台功能。 (2) 网络层 网络层主要包括PRC(Remote Procedure Call,远程过程调用)和RDMA(Remote Direct Memory Access,远程直接内存访问)通信协议,主要实现不同设备间的数据传输和更新,这些协议都会在分布式计算中用到。 (3) 数据操作层 数据操作层以Tensor为处理对象,实现Tensor的各种操作或计算。这些操作包括MatMul等计算操作,也包含Queue等非计算操作 (4) 图计算层 图计算层主要包括分布式计算图和本地计算图的实现,主要实现了图的创建、编译、优化和执行等部分。
ppt page 4: TensorFlow的系统架构具备许多特性,在官网中着重介绍了以下几个特性: 1、高度灵活性(Deep Flexibility) TensorFlow只要能够将计算表示成数据流图,驱动计算的内部循环就可以使用它来实现。除了系统提供的神经网络中的常见子图外,还能编写TensorFlow之上的库,这样可以极大地减少重复代码量 2、真正的可移植性(True Portability) TensorFlow可以运行在CPU和GPU上,也可以在桌面端、服务器、移动端、云端服务器和Docker等各类终端上运行。 3、连接研究与产品(Connect Research and Production) 可以让产品研究人员更快的将想法变成产品,可以让学术研究人员更直接的共享代码,具有更大的科学产出率。过去机器学习想法从研究转变成产品时,一般都需要大量的代码得写工作,现在研究人员在TensorFlow中进行新算法的实验,产品团队用TensorFlow来训练模型并实时的使用模型为真实的消费者服务 4、自动微分(Auto-Differentiation) TensorFlow能够自动完成微分计算操作。在基于梯度的机器学习算法中求微分是重要的步骤,使用它完成机器学习,只需定义预测模型的计算结构、目标函数,然后添加数据便能完成微分计算 5、多语言选择(Language Options) TensorFlow附带了Python、C++、Java、Go、Javascript、R等接口来构建用户程序 6、最大化性能(Maximize Performance) TenserFlow对线程、队列和异步计算具有一流的支持,可以让你最大限度地利用可用硬件,即使拥有具有32核CPU和4块GPU的工作站,也可以将TensorFlow中的计算需求分配到CPU和GPU中,实现同时计算的效果,从而最大化的利用硬件资源
ppt page 5: TensorFlow有自己的设计理念和编程模型,理解其编程模型是后续进行机器学习的基础。 如图所示,可以将TensorFlow理解为一张计算图中的”张量的流动”,其由Tensor和Flow两部分组成。Tensor(张量)代表了计算图中的边,Flow(流动)代表了计算图中因节点所做的操作而形成的数据流动
ppt page 6: TensorFlow设计理念是以数据流为核心,当构建了相应的机器学习模型后,使用训练数据在模型中进行数据流动,同时将结果以反向传播的方式反馈给模型中的参数进行调整,使用调整后的参数对训练数据再次进行迭代计算 下面通过一张基础的数据流图来说明数据流图中的各个要素,如图所示: 该图的计算过程是回归模型计算,在图中数据由下向上运行,主要包括输入(Input)、重塑(Reshape)、Relu层(Relu Layer)、Logit层(Logit Layer)、Softmax方法,交叉熵(Cross Entropy)、梯度(Gradient)、SGD训练(SGD Trainer)等步骤。 计算过程从输入开始,经过重塑成为统一格式,然后进行下一步运算。 在Relu层有两个参数:Wh1和bh1。使用Relu层的激活函数进行非线性计算处理后,进行Logit层。 在Logit层有另外两个学习参数:Wsm和bsm,用于存储计算的结果。 完成计算后使用Softmax方法计算出各类输出结果的概率分布。同时,用交叉熵度量源样本概率分布和输出结果概率分布之间的相似性。然后使用Wh1、bh1、Wsm和bsm以及交叉熵结果来计算梯度,随后进入SGD训练。 在SGD训练中,通过梯度计算值反向传播,依次更新bsm、Wsm、bh1和Wh1,然后再进行计算,不断地进行迭代学习 此过程比较复杂,如果还没有理解的同学,也不用着急,我们在后面章节会经常接触到此流程,会反复讲解该流程的。
ppt page 7: Tensorflow除了以数据流为核心外,在编程实现过程中它还具备两大特点: 1、 将图的定义和图的运行完全分开 使用TensorFlow进行编程与使用Python进行编程有明显的区别。在使用Python进行编程时,只要定义的相关变量以及运算,在程序运行时就会直接执行相关运算得到结果。但是在TensorFlow中,需要预先定义各种变量,建立相关的数据流图,在数据流图中定义各种变量之间的计算关系,以此完成图的定义。此时,图只是运算规则,没有任何实际数据,需要把运算的输入数据放进去后,才会形成输出值 2、图的计算在会话(Session)中执行 TensorFlow的相关计算在图中进行定义,而图的具体运行环境在会话(Session)中。只有开启会话后,才可以使用相关数据填充节点,这样才能开始计算,关闭会话后,就不能再进行计算了。
ppt page 8: 前面介绍了TensorFlow的特点,为了更深入地理解TensorFlow的设计,以便后续更好的掌握各种机器学习模型,下面梳理一下TensorFlow的源代码 TensorFlow的源代码在GitHub上进行了开源,在GitHub中将Tags选择为v1.15.0,然后将源码下载到本地,以下是下载地址
我们以1.15.0为例,看看其代码结构如下。
其中tensorflow是源码主目录
ppt page 9: 下面介绍tensorflow源码几个重要目录。 1、 contrib contrib目录中保存的是TensorFlow中经常用到的功能,第三方库 2、 core core目录中保存的是TensorFlow的底层实现,是C语言文件,包括公共运行库、基础功能模块和核心操作等 3、 examples examples目录中提供了深度学习的一些示例,特别是,该目录中的Android目录是在Android系统中实现的移动端应用。但是某些示例已被调整到独立的models项目中 4、 python python目录中提供了机器学习中经常用到的激活函数、池化函数、损失函数以及循环神经网络等 5、 java java目录提供了java客户端调用接口 更详细的介绍请大家查看教材第30-32页。
ppt page 10: 小结:本节主要讲解Tensorflow基础框架和源码结构,本节讲解到这里,谢谢大家
|