1. 基础架构
自底向上分为:
- 网络层和设备层
- 数据操作层
- 图计算层
- API 层
- 应用层
1.1 网络通信层和设备管理层
网络通信层包括 gRPC 和 RDMA ,都是分布式计算时需要用到的。
设备管理层包括 tf 分别在 CPU GPU FPGA 等设备上的实现,也就是对上层提供了一个统一的接口,使得上层只需要处理卷积等逻辑,而不需要关心在硬件上的卷积的实现过程。
1.2 数据操作层
包括卷积函数、激活函数等操作。
1.3 图计算层
本地计算图和分布式计算图的实现
1.4 API 层
python实现和其他语言的实现
1.5 应用层
主要是训练相关类库和预测相关类库
2. 设计理念
2.1 图的定义和图的实现完全分开
符号式编程涉及很多的嵌入和优化,不容易理解和调试,但是运行速度有所提升。
2.2 涉及的运算全部放在图中,图的运行只是发生在会话 session 中。
下面是举例:
1 |
|
- 编程模型
运行原理:
- 输入input
- 塑形reshape
- Relu层
- Logit层
- Softmax
- 交叉熵cross entropy
- 梯度gradient
- SGD 训练
从输入开始,经过塑形后,一层一层进行前向传播运算。Relu层里会有两个参数,在输出前使用Relu激活函数来做非线性处理。然后进入Logit层,学习两个参数。用softmax来计算输出结果中各个类别的概率分布。用交叉熵来度量两个概率分布之间的相似性。然后开始计算梯度,以及交叉墒后的结果。随后进入SGD训练,也就是反向传播的过程,从上往下计算每一层的参数,依次进行更新。
tensorflow 顾名思义就是指“张量的流动”,数据流图是由节点node和边edge组成的有向无环图。
3.1 边
张量具有数据属性 如tf.float32等。
3.2 节点
节点的运算操作有数学、数组等。详细代码在源码tensorflow/python/ops/目录下。
3.3 设备
设备device是指一块可以用来运算且拥有自己地址空间的硬件。
3.4 变量
变量variable是一种特殊的数据,在图中有固定的位置,不像张量那样可以流动。
3.5 内核
操作是对抽象操作的一个统称,而内核kernel则是能够运行在特定设备上的一种对操作的实现。