
2.2 TensorFlow源代码结构分析
前面介绍了TensorFlow的特点,为了更深入地理解TensorFlow的设计,以便后续更好地掌握各种机器学习模型,下面梳理一下TensorFlow的源代码。
2.2.1 源代码下载
TensorFlow的源代码在GitHub上进行了开源,在GitHub中将Tags选择为1.6版本,如图2.3的左图所示。跳转到1.6版本后,对源代码进行下载并解压到本地,如图2.3的右图所示。

图2.3 源代码下载图
2.2.2 TensorFlow目录结构
我们以TensorFlow 1.6版本为例,看看其代码结构。

其中,最重要的源代码保存在tensorflow目录中,目录结构如下:

2.2.3 重点目录
下面介绍tensorflow目录中的几个重要目录。
1.contrib
contrib目录中保存的是TensorFlow中经常用到的功能,其中常用的几个功能如下。
□ Android
新增加的功能,主要提供了在Android系统上对TensorFlow的支持。
□ cudnn_rnn
实现基于cuDNN的循环神经网络。
□ framework
公共框架方法,包括大量函数的定义,也包括一些被废弃的函数。
□ layers
TensorFlow中分层的实现,主要包括initializers.py、layers.py、optimizers.py、regularizers.py和summaries.py等文件。其中initializers.py主要是完成对变量初始化的函数,layers.py主要是关于层操作和权重偏置变量的函数,optimizers.py主要包括损失函数和global_step张量的优化操作,regularizers.py主要包括带有权重的正则化操作。
□ learn
主要是进行深度学习的API,主要包括训练模型和评估模型、读取批处理数据和队列功能的封装。
□ slim
TensorFlow-Slim(TF-Slim)是一个轻量级的库,主要用于定义、训练和评估TensorFlow中的模型。
□ tensorboard
主要是对TensorFlow训练图表可视化工具的数据记录。
2.core
core目录中保存的是TensorFlow的底层实现,是C语言文件,包括公共运行库、基础功能模块和核心操作等。下面介绍它的两个重要功能。
□ protobuf
用于传输时的数据序列化。谷歌公司创建了一种新的数据序列化工具Protocol Buffer,而不是使用XML等方式来对结构化数据进行序列化。在TensorFlow中就是使用Protocol Buffer来完成RPC数据传递的。
□ framework
主要包括设备、节点、操作及属性等基层功能模块。
3.examples
examples目录中提供了深度学习的一些示例,特别是,该目录中的android目录是在Android系统中实现的移动端应用。但是某些示例已被调整到独立的models项目中。
4.python
python目录中提供了机器学习中经常用到的激活函数、池化函数、损失函数以及循环神经网络函数等。