本文介绍TensorFlow基础概念,主要内容如下:
- TensorFlow模块与架构介绍
- TensorFlow数据流图介绍
- 张量(Tensor)介绍
- 变量(Variable)介绍
- 操作(Operation)介绍
- 会话(Session)介绍
- 优化器(Optimizer)介绍
TensorFlow模块与架构介绍
TensorFlow与APIs:
TensorFlow架构:
TensorFlow数据流图介绍
TensorFlow是一种声明式的编程范式,计算单元为函数,通过结构化、抽象化实现"要什么",声明式的编程范式表达力更强,例如:
TensorFlow数据流图:
TensorFlow数据流图的构成:
- 张量:可以很好地表示高维数组的一种抽象,使用多维数组描述高维抽象
- 稀疏张量:存储重要的有意义值
- 计算节点: 操作
- 存储节点: 变量
- 数据节点: 描述图外输入的数据
TensorFlow数据流图借鉴拓扑排序思想, 从入度为零的点开始的可执行序列。
TensorFlow数据流图优势:
其中"快"体现在并行计算与分布式计算的速度上,纵坐标表示每秒可以处理的图片数量:
在经典的四种网络上,人工合成与读出的真正数据(涉及I/O)的速度比较:
张量(Tensor)介绍
数学中的张量:
- 0阶张量:标量
- 1阶:向量
-
2阶:矩阵
其中阶指数据的最大维度:
TensorFlow中的张量:
- 用来表示多维数据
- 是执行操作时的输入或输出数据
- 通过执行操作来创建或计算张量
- 张量的形状不一定在编译时确定,可以在运行时通过形状推断计算得出,如None的定义
几种特别的张量:
其中高维数据占位符,只有壳没有数值;
变量,维护状态保存值。
0、1阶张量:
2、4阶张量:
其中tf.rank()用于求张量的阶数:
与Variable不同,tensor在物尽其用之后会被类似垃圾回收的机制释放掉内存。
变量(Variable)介绍
如W,b即变量,常驻内存中。
变量与张量的区别:
变量的操作:
创建变量时,<option-name>是可选的的变量名,以下两种加法等价:
TensorFlow变量使用流程:
其文件结构如下:
其中data存储值,index存储索引,meta存储数据流图的结构。
变量操作与saver的使用如下:
-
创建变量:
-
初始化变量:
-
saver使用示例:
其中my-model表示前缀, globel_step表示想恢复的时间点的模型参数
-
创建saver与恢复变量实例:
其中tf.train.import_meta_graph
用于恢复大规模神经网络数据流图的结
操作(Operation)介绍
操作的输入和输出是张量或操作本身。
TensorFlow典型计算和控制操作如下:
由于TensorFlow中运行前不知运行时状态,故不建议使用"逻辑控制和调试"操作。
TensorFlow占位符操作:
常量的乘加运算:
使用占位符的乘加运算:
其中,"tf.add(x, y)"操作中函数需要的值只需在运行时刻输入即可,称为"惰性求值"
会话(Session)介绍
TensorFlow会话:
不指定Session的属性则是默认值
Session.run()乘加操作的实例:
右侧的常量操作不需要初始化即可得到相应的值
获取张量的操作除sess.run()以外,还有以下的tensor.eval()
和operation.run()
方法:
以上输出为4.0。
TensorFlow会话的执行:
可见其中tensor.eval()与operation.run()方法都是底层调用session.run()的方法。
TensorFlow会话的执行原理:
- 操作节点组成子图
- 相同设备上的节点(计算、存储、数据节点)组成局部图
-
依赖关系下在设备上有序执行各个节点
TensorFlow会话的本地执行:
创建节点时指定执行该节点的设备:
TensorFlow本地计算:
其计算过程可在不同设备上执行:
优化器(Optimizer)介绍
前置知识:损失函数
常用的损失函数:
- 平方损失函数
- 交叉熵损失函数
-
指数损失函数
经验风险:
即训练集的平均损失:
结构风险最小化:
引入度量模型复杂度的正则化项或惩罚项的过程,称为结构风险最小化。
构成:由经验风险项与正则项
常用正则化项:L0,L1,L2范数;用以降低模型的复杂度,防止过拟合
最优的模型参数:
正题:优化算法
- 使用目标函数的一阶导数, 如梯度下降法
- 使用目标函数的二阶导数, 如牛顿法、Hessian矩阵(计算量大很多)等
- 使用前几轮迭代的信息,如Adam
随机梯度下降法:
TensorFlow的训练机制:
TensorFlow的优化器:
对梯度的计算-处理-应用
其中SyncReplicasOptimizer用于分布式训练
流程如下:
或者
TensorFlow的内置有优化器:
网友评论