tensorflow foundation

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15

import tensorflow as tf

a = tf.constant([1.0, 2.0])
b = tf.constant([3.0, 4.0])
c = a * b

sess = tf.Session()

print sess.run(c)
sess.close()

# 当然 一般写法是这样
with tf.Session() as sess:
print sess.run(c)
  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则是能够运行在特定设备上的一种对操作的实现。