1.1 概要
官网:https://www.tensorflow.org/
GitHub:https://github.com/tensorflow/tensorflow
模型仓库:https://github.com/tensorflow/models
TensorFlow既是一个实现机器学习算法的接口,也是执行机器学习算法的框架。
除了执行深度学习,还可以实现许多其他算法,比如线性回归、逻辑回归、随机森林等。
主要技术特性:
- 编程模型:数据流模型
- 语言:Python、C++、Java
- 部署:一次编写,各处运行
- 计算资源:CPU、GPU、TPU(Tensor Processing Unit,google专门为深度学习计算定制的芯片)
- 实现方式:单机OR分布式
- 平台支持:谷歌云平台、Hadoop分布式文件系统
1.2编程模型简介
在计算图的边中流动(flow)的数据被称为张量(tensor),故得名TensorFlow。
有一类特殊的边中没有数据流动,这种边是依赖控制,作用是让它的起始节点执行完之后再执行目标节点,用户可以使用这样的边进行灵活的条件控制,比如限制内存使用的最高峰值。
Session是用户使用TensorFlow的交互式接口,可以创建计算图,之后用Run方法执行计算图。
1.2.2 实现原理
TensorFlow的客户端,通过Session的接口与master及多个worker相连。其中每个worker可以与多个硬件设备相连(CPU|GPU)。master负责指导所有worker按流程执行计算图。
tensor的引用次数会被记录,当引用数为0时,内存将被释放。
节点分配设备策略:
- 启发式,人工经验制定
- 简单贪婪,对一小部分数据进行实际运算而测量得到。(未来可能会用强化学习的神经网络进行辅助决策)
- 用户自定
1.2.3拓展功能
自动求导、单独执行子图、计算图的控制流
1.2.4性能优化
自动识别重复计算,改写计算图;异步计算,线程执行无须一直等待某个节点计算完成;支持高度优化第三方计算库;
TensorFlow提供三种不同的加速神经网络训练的并行计算模式:
- 数据并行:将一个mini-batch的数据放在不同设备上计算,实现梯度计算的并行化。
- 模型并行:将计算图的不同部分放在不同的设备上运算,实现简单的模型并行,目标在于减少每一轮训练迭代的时间。
- 流水线并行:和异步的数据并行很像,只不过是在同一个硬件设备上实现并行。