系统架构。
自底向上,设备层、网络层、数据操作层、图计算层、API层、应用层。核心层,设备层、网络层、数据操作层、图计算层。最下层是网络通信层和设备管理层。
网络通信层包括gRPC(google Remote Procedure Call Protocol)和远程直接数据存取(Remote Direct Memory Access,RDMA),分布式计算需要。设备管理层包手包括TensorFlow分别在CPU、GPU、FPGA等设备上的实现。对上层提供统一接口,上层只需处理卷积等逻辑,不需要关心硬件上卷积实现过程。
数据操作层包括卷积函数、激活函数等操作。
图计算层包括本地计算图和分布式计算图实现(图创建、编译、优化、执行)。
应用层:训练相关类库、预测相关类库
API层:Python客户端、C++客户端、Java客户端、Go客户端,TensorFlow核心API
图计算层:分布式计算图、本地计算图
数据操作层:Const、Var、Matmul、Conv2D、Relu、Queue
网络层:gPRC、RDMA
设备层:CPU、GPU
设计理念。
图定义、图运行完全分开。符号主义。命令式编程(imperative style programming),按照编写逻辑顺序执行,易于理解调试。符号式编程(symbolic style programming),嵌入、优化,不易理解调试,运行速度快。Torch命令式,Caffe、MXNet混合,TensorFlow完全符号式。符号式计算,先定义各种变量,建立数据流图,规定变量计算关系,编译数据流图,这时还只是空壳,只有把数据输入,模型才能形成数据流,才有输出值。
TensorFlow运算在数据流图中,图运行只发生在会话(session)中。开启会话,数据填充节点,运算。关闭会话,无法计算。会话提供操作运行和Tensor求值环境。
inport tensorflow as tf
#创建图
a = tf.constant([1.0,2.0])
b = tf.constant([3.0,4.0])
c = a * b
#计算c
print sess.run(c)#进行矩阵乘法,输出[3.,8.]
sess.close()
编程模型。
TensorFlow用数据流图做计算。创建数据流图(网络结构图)。TensorFlow运行原理,图中包含输入(input)、塑形(reshape)、Relu层(Relu layer)、Logit层(Logit layer)、Softmax、交叉熵(cross entropy)、梯度(gradient)、SGD训练(SGD Trainer),简单回归模型。
计算过程,从输入开始,经过塑形,一层一层前向传播运算。Relu层(隐藏层)有两个参数,Wh1、bh1,输出前用ReLu(Rectified Linear Units)激活函数做非线性处理。进入Logit层(输出层),学习两个参数Wsm、bsm。用Softmax计算输出结果各个类别概率分布。用交叉熵度量源样本概率分布和输出结果概率分布之间相似性。计算梯度,需要参数Wh1、bh1、Wsm、bsm、交叉熵结果。SGD训练,反向传播,从上往下计算每层参数,依次更新。计算更新顺序,bsm、Wsm、bh1、Wh1。
TensorFlow,张量流动。TensorFlow数据流图由节点(node)、边(edge)组成有向无环图(directed acycline graph,DAG)。TensorFlwo由Tensor和Flow两部分组成。Tensor(张量),数据流图的边。Flow(流动),数据流图节点操作。
SGD训练:
Wh1 bh1 Wsm bsm
更新Wh1 更新bh1 更新Wsm 更新bsm
learning)rat=[0.01]
Gradients
交叉熵
classes=[10] 类标记 Softmax
Logit层:
bsm BiasAdd
Wsm MatMul
Relu层:
ReLU
bh1 Bias Add
Wh1 MatMul
塑形shape=[784,1]
输入
边。数据依赖、控制依赖。实线边表示数据依赖,代表数据,张量(任意维度的数据)。机器学习算法,张量在数据流图从前往后流动,前向传播(forword propagation)。残差(实际观察值与训练估计值的差),从后向前流动,反向传播(backword propagation)。虚线边表示控制依赖(control dependency),控制操作运行,确保happens-before关系,边上没有数据流过,源节点必须在目的节点开始执行前完成执行。
TensorFlow张量数据属性:
数据类型 Python类型 描述
DT_FLOAT tf.float32 32位浮点型
DT_DOUBLE tf.float64 64位浮点型
DT_INT64 tf.int64 64位有符号整型
DT_INT32 tf.int32 32位有符号整型
DT_INT16 tf.int16 16位有符号整型
DT_INT8 tf.int8 8位有符号整型
DT_UINT8 tf.uint8 8位无符号整型
DT_STRING tf.tring 要变长度字节数组,每一张量元素是一字节数组
DT_BOOL tf.bool 布尔型
DT_COMPLEX64 tf.complex64 两个32位浮点数组成复数,实部、虚部
DT_QINT32 tf.qint32 量化操作32位有符号整型,信号连续取值或大量可能离散取值,近似为有限多个或较少离散值
DT_QINT8 tf.qint8 量化操作8位有符号整型
DT_QUINT8 tf.quint8 量化操作8位无符号整型
图和张量实现源代码:tensorflow-1.1.0/tensorflow/python/framework/ops.py
节点。算子。代表一个操作(operation,OP)。表示数学运算,也可以表示数据输入(feed in)起点和输出(push out)终点,或者读取、写入持久变量(persistent variable)终点。
操作相关代码位于: tensorflow-1.1.0/tensorflow/python/ops/
TensoFlow实现算子(操作):
类别 示例
数学运算操作 Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal……
tensorflow-1.1.0/tensorflow/python/ops/math_ops.py,每个函数调用gen_math_ops.py,位于Python库stite-packages/tensorflow/python/ops/gen_math_ops.py ,又调用tensorflow-1.1.0/tensorflow/core/kernels/下核函数实现
数组运算操作 Concat、Slice、Split、Constant、Rank、Shape、Shuffle……
tensorfl