第二章 Tensorflow基础

1. 2.1 Tensorflow基础第1节

ppt page 1:

大家好,接下来给大家讲解一下第2TensorFlow基础 第1节,主要有以下两部分内容:

1、  Tensorflow基础框架

2、  Tensorflow源码结构分析

 

ppt page 2:

本节学习目标;

1、了解Tensorflow基础框架

2、了解Tensorflow源码结构

 

ppt page 3:

Tensorflow系统框架分为三层,由上而下依次是应用层、接口层和Tensorflow核心层,如下图所示:

 

1. 应用层

应用层是TensorFlow框架的最上层,主要提供了机器学习相关的训练库、接口库以及针对PythonC++Java等编程语言的编程环境,便于不同编程语言在应用层通过接口层调用TensorFlow核心功能以实现相关实验和应用。可以将应用层理解为系统的前端,这样便于使用Python等语言进行编程,主要实现对计算图的构造。

2、接口层

接口层是对TensorFlow功能模块的封装,便于其他语言平台调用

3、核心层

核心层是TensorFlow进行运算学习的最重要部分,包括设备层、网络层、数据操作层和计算层。可以将核心层理解为系统的后端,它对前端提出的计算命令进行具体的计算

(1) 设备层

设备层主要包括TensorFlow在不同硬件设备上的实现,主要支持CPUGPUMobile等不同设备。通过在不同的硬件设备上实现计算命令转换,给上层提供统一的接口,实现程序的跨平台功能。

(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可以运行在CPUGPU上,也可以在桌面端、服务器、移动端、云端服务器和Docker等各类终端上运行。

3、连接研究与产品(Connect Research and Production)

可以让产品研究人员更快的将想法变成产品,可以让学术研究人员更直接的共享代码,具有更大的科学产出率。过去机器学习想法从研究转变成产品时,一般都需要大量的代码得写工作,现在研究人员在TensorFlow中进行新算法的实验,产品团队用TensorFlow来训练模型并实时的使用模型为真实的消费者服务

4、自动微分(Auto-Differentiation)

TensorFlow能够自动完成微分计算操作。在基于梯度的机器学习算法中求微分是重要的步骤,使用它完成机器学习,只需定义预测模型的计算结构、目标函数,然后添加数据便能完成微分计算

5、多语言选择(Language Options)

TensorFlow附带了PythonC++JavaGoJavascriptR等接口来构建用户程序

6、最大化性能(Maximize Performance)

TenserFlow对线程、队列和异步计算具有一流的支持,可以让你最大限度地利用可用硬件,即使拥有具有32CPU4GPU的工作站,也可以将TensorFlow中的计算需求分配到CPUGPU中,实现同时计算的效果,从而最大化的利用硬件资源

 

ppt page 5:

TensorFlow有自己的设计理念和编程模型,理解其编程模型是后续进行机器学习的基础。

如图所示,可以将TensorFlow理解为一张计算图中的张量的流动,其由TensorFlow两部分组成。Tensor(张量)代表了计算图中的边,Flow(流动)代表了计算图中因节点所做的操作而形成的数据流动

 

ppt page 6:

TensorFlow设计理念是以数据流为核心,当构建了相应的机器学习模型后,使用训练数据在模型中进行数据流动,同时将结果以反向传播的方式反馈给模型中的参数进行调整,使用调整后的参数对训练数据再次进行迭代计算

下面通过一张基础的数据流图来说明数据流图中的各个要素,如图所示:

该图的计算过程是回归模型计算,在图中数据由下向上运行,主要包括输入(Input)、重塑(Reshape)Relu(Relu Layer)Logit(Logit Layer)Softmax方法,交叉熵(Cross Entropy)、梯度(Gradient)SGD训练(SGD Trainer)等步骤。

计算过程从输入开始,经过重塑成为统一格式,然后进行下一步运算。

Relu层有两个参数:Wh1bh1。使用Relu层的激活函数进行非线性计算处理后,进行Logit层。

Logit层有另外两个学习参数:Wsmbsm,用于存储计算的结果。

完成计算后使用Softmax方法计算出各类输出结果的概率分布。同时,用交叉熵度量源样本概率分布和输出结果概率分布之间的相似性。然后使用Wh1bh1Wsmbsm以及交叉熵结果来计算梯度,随后进入SGD训练。

SGD训练中,通过梯度计算值反向传播,依次更新bsmWsmbh1Wh1,然后再进行计算,不断地进行迭代学习

此过程比较复杂,如果还没有理解的同学,也不用着急,我们在后面章节会经常接触到此流程,会反复讲解该流程的。

 

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基础框架和源码结构,本节讲解到这里,谢谢大家