TensorFlow机器学习(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.5 TensorFlow

2015年底,谷歌在Apache 2.0许可下开源了其机器学习框架TensorFlow。在此之前,它被谷歌内部用于语音识别、搜索、照片和Gmail等应用程序。

一点历史

DistBelief是之前的一个可扩展的分布式训练和学习系统,它是TensorFlow当前实现的前身。你是否曾经写过一段乱七八糟的代码,然后希望可以从头开始?这就是DistBelief和TensorFlow的关系。TensorFlow不是谷歌第一个基于内部项目的开源系统。谷歌著名的Map-Reduce系统和谷歌文件系统(GFS)是当前Apache数据处理、网络爬虫和大数据系统(包括Hadoop、Nutch和Spark)的基础。此外,谷歌的bigTable系统是Apache Hbase项目的来源。

这个库是用C++实现的,有着便捷的Python API,以及一个不那么受欢迎的C++ API。由于依赖关系简单,TensorFlow可以快速部署到各种架构中。

类似于Theano——你可能熟悉的一个流行的Python数值计算库(http://deeplearning.net/software/theano),计算被描述为流图,将设计与实现分开。这种二分法几乎没有任何麻烦,允许同样的设计在移动设备上实现,以及在拥有数千个处理器的大规模训练系统上实现。这是一个跨平台的系统。TensorFlow还可以很好地兼容各种新的开发类的ML库,包括Keras(TensorFlow 2.0可以与Keras完全集成),以及一些库,如最初由Facebook开发的PyTorch(https://pytorch.org),以及更丰富的ML应用程序编程接口,如Fast.Ai。你可以使用许多工具包来实现ML,但你正在阅读一本关于TensorFlow的书,对吗?让我们专注于它!

TensorFlow最奇特的特性之一是它的自动微分功能。你可以尝试新的网络,而不必重新定义许多关键计算。

注意 自动微分技术使得实现反向传播变得容易得多。反向传播是一种计算量很大的工作,它用于机器学习的一个分支——神经网络。TensorFlow隐藏了反向传播的细节,所以你可以关注更宏观的问题。第11章有关于使用TensorFlow的神经网络的介绍。

所有的数学运算都被抽象和封装了起来,使用TensorFlow就像使用WolframAlpha来做微积分习题一样。

这个库的另一个特性是它的交互式可视化环境,称为TensorBoard。该工具显示数据转换的流图,显示随时间变化的汇总日志,并跟踪性能。图1.11展示了TensorBoard的样子,我们将在第2章介绍如何使用它。

图1.11 TensorBoard示例

在TensorFlow中创建原型要比在Theano中快得多(代码启动只需几秒钟,而不是几分钟),因为许多操作都是预先编译的。由于运行子图调试代码变得很容易,不需要重新计算就可以重用整个计算段。

TensorFlow不仅仅应用于神经网络,它也有开箱即用的矩阵计算和操作工具。大多数库(比如PyTorch、Fast.Ai和Caffe)是专门为深度神经网络设计的,但TensorFlow有更好的灵活性和可扩展性。

这个库的文档完善并且得到了谷歌的官方支持。机器学习是一个复杂的话题,因此有一家声誉卓著的公司支持TensorFlow是令人欣慰的。