《智能计算系统》第四章
第四章 编程框架的使用
4.1 TensorFlow编程模型及基本用法
在程序开发中,根据解决问题的不同思路,通常采用两种不同的编程方式,常见的编程方式有两种:命令式编程和声明式编程。
命令式编程:关注程序执行的具体步骤,计算机按照代码中的顺序一步一步地执行具体的运算,整体优化困难。比如交互式UI程序和操作系统。
声明式编程:告诉计算机想要表达的目标,不指定具体的实现步骤,而是通过函数、推理规则等来描述数据之间的关系,优化比较容易。比如人工智能和深度学习。
4.1.1 计算图
用包含了一组节点和边的有向图来描述计算过程,这个有向图叫做计算图。TensorFlow使用计算图来表示机器学习算法中所有的计算和状态。
4.1.2 操作
计算图中每个节点代表一个操作,表示一个局部计算,TensorFlow中一些常用操作如下:
操作类型 | 常用操作 |
---|---|
标量运算 | add、subtract、multiply、div、greater、less、equal、abs、sign、square、pow、log、sin、cos |
矩阵运算 | matmul、matrix_inverse、matrix_determinant、matrix_transpose |
逻辑操作 | logical_and、is_finite |
神经网络运算 | convolution、max_pool、bias_add、softmax、dropout、sigmoid、relu |
保存和恢复 | save、restore |
初始化操作 | zeros_initializer、random_normal_initializer、orthogonal_initializer |
随机运算 | random_gamma、multinomail、random_normal、random_shuffle |
4.1.3 张量
TensorFlow用张量来计算图中的所有数据。张量在计算图的节点之间流动,但张量并没有实际保存数据,只是对操作结果的引用。张量可以看作N维数组,数组的维数就是张量的阶数。对张量的常用操作可以查看书本。
4.1.4 会话
真正的计算过程需要在TensorFlow程序的会话中定义并执行。会话为程序提供了求解张量、执行操作的运行环境。一个典型的使用流程就是:创建会话;执行会话;关闭会话。
4.1.5 变量
变量是计算图中的一种有状态节点,用来在多次执行同一计算图时存储并更新指定张量,常用来表示机器学习或深度学习算法中的模型参数。变量的常用属性如下:
属性名称 | 含义 |
---|---|
dtype | 变量的数据类型 |
shape | 变量的形状 |
name | 变量在计算图中的名称 |
op | 产生此变量的操作 |
device | 存储此变量所用的设备名 |
graph | 包含此变量的计算图 |
initialized_value | 变量的初始值 |
initializer | 为变量赋值的初始化操作 |
trainable | 是否在训练时被优化器更新 |
4.1.6 占位符
占位符是TensorFlow中特有的数据结构,它本身没有初值,仅在程序中分配了内存。通过占位符将张量传递到会话中。
4.1.7 队列
通过队列处理数据读取和计算图的异步执行。队列是一种有状态的操作机制,用来处理数据读取。