深度学习之TensorFlow实战2

TensorFlow基本概念

图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。
操作(op):图中的节点被称为op(opearation的缩写),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。
会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或GPU之类的设备上执行。
变量(Variable):运行过程中可以被改变,用于维护状态。

TensorFlow的边即有两种连接关系:
数据依赖
控制依赖
实线边表示数据依赖,代表数据,即张量。任意维度的数据统称为张量。在机器学习算法中,张量在数据流图中从前往后流动一遍就完成一次前向传播,而残差从后向前流动一遍就完成一次反向传播。

虚线边表示控制依赖,可以用于控制操作的运行,这被用来确保happensbefore关系,这类边上没有数据流过,但源节点必须在目的节点开始执行前完成。

数据属性

深度学习之TensorFlow实战2_第1张图片

节点

节点又称为算子,它代表一个操作,一般用来表示施加的数字运算,也可以表示数据输入的起点以及输出的重点,或者是读取/写入持久变量的终点。
深度学习之TensorFlow实战2_第2张图片

TensorFlow基本用法

TensorFlow可以认为是一种编程工具,使用TensorFlow来实现具体的业务需求,所以我们可以认为TensorFlow就是一个“工具箱”,然后我们使用TensorFlow这个“工具箱”中的各种“工具”(方法/API)来实现各种功能,比如使用TensorFlow实现基本的数值计算、机器学习、深度学习等;使用TensorFlow必
须理解下列概念:
使用图(graph)来表示计算任务;
在会后(session)的上下文中执行图;
使用tensor表示数据;
通过变量(Variable)来维护状态 ;
使用feed和fetch可以为任意的操作(Operation/op)赋值或者从其中获取数据。

TensorFlow程序结构

TensorFlow的程序一般分为两个阶段:构建阶段和执行阶段;
构建阶段:op的执行步骤被描述称为一个图,然后使用TensorFlow提供的API构建这个图。
执行阶段:将构建好的执行图(Operation Graph)在给定的会话中执行,并得到执行结果。

TensorFlow图

TensorFlow编程的重点是根据业务需求,使用TensorFlow的API将业务转换为执行图(有向无环图);图中的节点是Tensor,节点之间的连线是节点之间的操作,连线前的节点可以认为是操作的输入,连线后的节点可以认为操作的输出;根据节点的特性(是否有输入输出),可以将节点分为源节点、中间节点和最终的结果节点。
图构建的第一步就是创建源op(source op); 源op不需要任何的输入。op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其它op构造器作为输入或者直接获取结构。
TensorFlow库中有一个默认图(default graph),op构造器可以直接为其添加节点,一般情况下,使用默认的Graph即可完成程序代码的实现。不过TensorFlow也支持通过Graph类管理多个图。
默认图现在有三个节点,两个constant op和一个matmul op。
深度学习之TensorFlow实战2_第3张图片

TensorFlow图

不使用默认图(Graph),使用多个图来进行编程;但是注意:操作必须属于同一个图,不同图中的节点不能相连。
深度学习之TensorFlow实战2_第4张图片

TensorFlow会话

当执行图构建完成后,才能给启动图,进入到执行阶段;启动图的第一步就是创建一个Session对象,如果无任何参数的情况下,会话构造器将启动默认图。

深度学习之TensorFlow实战2_第5张图片
tf.Session在构建会话的时候,如果不给定任何参数,那么构建出来Session对应的内部的Graph其实就是默认Graph,不过我们可以通过参数给定具体对应的是那一个Graph以及当前Session对应的配合参数。Session的构造主要有三个参数,作用如下:
target:给定连接的url,只有当分布式运行的时候需要给定(后面分布式运行讲);
graph:给定当前Session对应的图,默认为TensorFlow中的默认图;
config:给定当前Session的相关参数,参数详见:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/prot
obuf/config.proto中的[ConfigProto]

通过Session的config参数可以对TensorFlow的应用的执行进行一些优化调整,
主要涉及到的参数如下:
深度学习之TensorFlow实战2_第6张图片
深度学习之TensorFlow实战2_第7张图片
深度学习之TensorFlow实战2_第8张图片
深度学习之TensorFlow实战2_第9张图片
在TensorFlow中,除了可以使用Session表示这个会话外,还可以通过InteractiveSession来表示会话,InteractiveSession的意思是:交互式会话,使用交互式会话可以降低代码的复杂度,使用Tensor.eval()或者Operation.run()来代替Session.run()方法,这样可以避免一个变量来维持会话;备注:Session也可以使用Tensor.eval()和Operation.run()获取数据/执行操作(只要明确当前会话)。
深度学习之TensorFlow实战2_第10张图片
深度学习之TensorFlow实战2_第11张图片

Tensor张量

TensorFlow使用Tensor数据结构来代表所有数据,计算图中,操作间传递的数据都是Tensor。Tensor可以看作是一个n维的数组或者列表,一个Tensor主要由一个静态数据类型和动态类型的维数(Rank、Shape)组成。Tensor可以在图中的节点之间流通。
深度学习之TensorFlow实战2_第12张图片

TensorFlow变量

变量(Variables)是维护图执行过程中的状态信息。在训练模型过程中,可以通过变量来存储和更新参数。变量包含张量(Tensor)存放于内存的缓存区。建模的时候变量必须被明确的初始化,模型训练后变量必须被存储到磁盘。这些变量的值可以在之后的模型训练和分析中被加载。在构建变量的时候,必须将一个张量或者可以转化为张量的Python对象作为初始值传入构造函数Variable中。
特别注意:变量的全局初始化(tf.initialize_all_variables())是并行执行的,如果存在变量之间的依赖关系的时候,再进行初始化的时候要特别注意。
一个简单的使用变量的案例
深度学习之TensorFlow实战2_第13张图片
进行变量依赖的案例创建
深度学习之TensorFlow实战2_第14张图片

TensorFlow Fetch

为了取回操作的输出内容,可以在使用Session对象的run方法调用执行图的时候,传入一些tensor,通过run方法就可以获取这些tensor对应的结果值。如果需要获取多个tensor的值,那么尽量一次运行就获取所有的结果值,而不是采用逐个获取的方式。
深度学习之TensorFlow实战2_第15张图片

TensorFlow Feed

Tensorflow还提供了填充机制(feed),可以在构建图时使用placeholder类型的API临时替代任意操作的张量(占位符),在调用Session对象的run()方法去执行图时,使用填充数据作为调用的参数,调用结束后,填充数据就消失了。feed使用一个tensor值临时替换一个操作的输出结果,在获取数据的时候必须
给定对应的feed数据作为参数。feed只有在调用它的方法内有效,方法结束,feed就消失了。
feed可以使用placeholder类型的API创建占位符,常见API:tf.placeholder、tf.placeholder_with_default
深度学习之TensorFlow实战2_第16张图片

你可能感兴趣的:(深度学习,TensorFlow,人工智能,人工智能,深度学习,tensorflow,python)