3.3 主流深度学习框架及使用
3.3.1 TensorFlow简介
TensorFlow是一个基于数据流编程(Dataflow Programming)的符号数学系统,被广泛应用于各类机器学习(Machine Learning)算法的编程实现之中,其前身是谷歌的神经网络算法库DistBelief。TensorFlow拥有多层级结构,可部署于各类服务器、PC终端和网页,并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。
TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目及各类应用程序接口(Application Programming Interface,API)。自2015年11月9日起,TensorFlow依据阿帕奇授权协议(Apache 2.0 Open Source License)开放源代码。
Google Mind自2011年成立起开展了面向科学研究和谷歌产品开发的大规模深度学习应用研究,其早期工作即是TensorFlow的前身DistBelief。DistBelief的功能是构建各尺寸下的神经网络分布式学习和交互系统,也被称为“第一代机器学习系统”。DistBelief在其他公司的产品开发中被改进和广泛使用。2015年11月,在DistBelief的基础上,Google Mind完成了对“第二代机器学习系统”TensorFlow的开发并对代码开源。相比于前者,TensorFlow在性能上有显著改进、构架灵活性和可移植性也得到了增强。此后TensorFlow快速发展,截至稳定API版本1.12,已拥有包含各类开发和研究项目的完整生态系统。在2018年4月的TensorFlow开发者峰会中,有21个TensorFlow有关项目得到展示。在GitHub上,大约845个贡献者共提交超过17000次,这本身就是衡量TensorFlow流行度和性能的一个指标。TensorFlow的领先地位示意图,如图3-26所示。
图3-26 TensorFlow的领先地位示意图
TensorFlow(图中Tensorflow)与Torch、Theano、Caffe和MxNet(图中Mxnet)等其他大多数深度学习库一样,能够自动求导、开源、支持多种CPU/GPU、拥有预训练模型,并支持常用的NN架构,如递归神经网络(RNN)、卷积神经网络(CNN)和深度置信网络(DBN)。TensorFlow还有更多自身的特点,比如:
• 支持所有的流行语言,如Python、C++、Java、R和Go。
• 可以在多种平台上工作,甚至是移动平台和分布式平台。
• 它受到所有云服务(AWS、Google和Azure)的支持。
• Keras是高级神经网络API,已经与TensorFlow整合。
• 与Torch/Theano比较,TensorFlow拥有更好的计算图表可视化性能。
• 允许模型部署到工业生产中,并且容易使用。
• 有非常好的社区支持。
TensorFlow不仅仅是一个软件库,它还是一套包括TensorFlow、TensorBoard和TensorServing的软件。
3.3.2 PyTorch简介
PyTorch在学术研究者中很受欢迎,也是比较新的深度学习框架。Facebook人工智能研究组开发了PyTorch,以应对一些在前任数据库软件Torch使用中遇到的问题。由于编程语言Lua的普及程度不高,Torch达不到Google TensorFlow那样的迅猛发展,因此,PyTorch采用已经为许多研究人员、开发人员和数据科学家所熟悉的原始Python编程风格。同时它还支持动态计算图,这一特性使得其对时间序列及自然语言处理数据相关工作的研究人员和工程师很有吸引力。
PyTorch是Torch的Python版,2017年年初推出后,PyTorch很快成为AI研究人员的热门选择并受到推崇。PyTorch有许多优势,如采用Python语言、动态图机制、网络构建灵活及拥有强大的社群等。由于其灵活、动态的编程环境和用户友好的界面,PyTorch是快速实验的理想选择。
PyTorch现在是GitHub上增长速度第二快的开源项目,在2018年的12个月里,贡献者增加了2.8倍。而且,2018年12月在NeurIPS大会上,PyTorch 1.0稳定版终于发布了。PyTorch1.0增加了一系列强大的新功能,大有赶超深度学习框架老大哥TensorFlow之势。
PyTorch的特点有:
① TensorFlow 1.0与Caffe都是命令式的编程语言,而且是静态的,首先必须构建一个神经网络,然后一次又一次地使用同样的结构,如果想要改变网络的结构,就必须从头开始。但是对于PyTorch,通过一种反向自动求导的技术,可以零延迟地任意改变神经网络的行为,尽管这项技术不是PyTorch所独有的,但目前为止它的实现是最快的,能够为任何想法的实现获得最快的速度和最佳的灵活性,这也是PyTorch对比TensorFlow最大的优势。
② PyTorch的设计思路是线性、直观且易于使用的,当代码出现Bug的时候,可以通过这些信息轻松快捷地找到出错的代码,不会在出现Debug的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。
③ PyTorch的代码相对于TensorFlow而言,更加简洁直观,同时对于TensorFlow高度工业化的很难看懂的底层代码,PyTorch的源代码就要友好得多,更容易看懂。深入API,理解PyTorch底层肯定是一件令人高兴的事。一个底层架构能够看懂的框架,对其的理解会更深。
简要总结一下PyTorch的优点:
• 支持GPU。
• 动态神经网络。
• Python优先。
• 命令式体验。
• 轻松扩展。
3.3.3 Caffe简介
Caffe,全称Convolutional Architecture for Fast Feature Embedding(快速特征嵌入的卷积架构),是一个兼具表达性、速度和思维模块化的深度学习框架。由伯克利人工智能研究小组和伯克利视觉与学习中心开发。虽然其内核是用C++编写的,但Caffe有Python和Matlab相关接口。Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。Caffe支持基于GPU或CPU的加速计算内核库,如NVIDIA cuDNN和Intel MKL。
Caffe完全开源,并且在多个活跃社区沟通解答问题,同时提供了一个用于训练、测试等完整工具包,可以帮助使用者快速上手。此外Caffe还具有以下特点:
• 模块性。Caffe以模块化原则设计,实现了对新的数据格式、网络层和损失函数的轻松扩展。
• 表示和实现分离。Caffe已经用谷歌的Protocol Buffer定义模型文件。使用特殊的文本文件prototxt表示网络结构,以有向非循环图形式进行网络构建。
• Python和MATLAB结合。Caffe提供了Python和MATLAB接口,供使用者选择熟悉的语言调用部署算法应用。
• GPU加速。利用了MKL、Open BLAS、cuBLAS等计算库,利用GPU实现计算加速。
2017年4月,Facebook发布Caffe 2,加入了递归神经网络等新功能。2018年3月,Caffe 2并入PyTorch。
3.3.4 PaddlePaddle简介
PaddlePaddle是百度研发的开源开放的深度学习平台,是国内最早开源的功能完备的深度学习平台。依托百度业务场景的长期锤炼,PaddlePaddle有最全面的官方支持的工业级应用模型,涵盖自然语言处理、计算机视觉、推荐引擎等多个领域,并开放多个领先的预训练中文模型,以及多个在国际范围内取得竞赛冠军的算法模型。
PaddlePaddle同时支持稠密参数和稀疏参数场景的超大规模深度学习并行训练,支持 千亿规模参数、数百个节点的高效并行训练,也是较早提供深度学习并行技术的深度学习框架。PaddlePaddle拥有多端部署能力,支持服务器端、移动端等多种异构硬件设备的高速推理,预测性能有显著优势。目前PaddlePaddle已经实现了API的稳定和向后兼容,具有完善的中英双语使用文档,形成了易学易用、简洁高效的技术特色。
PaddlePaddle 3.0版本升级为全面的深度学习开发套件,除了核心框架,还开放了VisualDL、PARL、AutoDL、EasyDL、AIStudio等一整套的深度学习工具组件和服务平台,更好地满足不同层次的深度学习开发者的开发需求,具备了强大支持工业级应用的能力,已经被中国企业广泛使用,也拥有了活跃的开发者社区生态。
3.3.5 TensorFlow的使用
1. TensorFlow安装准备工作
TensorFlow安装的前提是系统安装了Python 2.5或更高的版本,本书中的例子是以Python3.5 (Anaconda 3版)为基础设计的。为了安装TensorFlow,需确保先安装了Anaconda,可以从网址https://www.anaconda.com/products/individual中下载,并安装适用于Windows/macOS或Linux的Anaconda。
安装完成后,可以在窗口中使用以下命令进行安装验证:
安装了Anaconda,下一步决定是否安装TensorFlow CPU版本或GPU版本。几乎所有计算机都支持TensorFlow CPU版本,而GPU版本则要求计算机有一个CUDA Compute Capability 3.0及以上的NVDIA GPU显卡(对于台式机而言最低配置为NVDIA GTX 650)。
【知识拓展】
CPU与GPU的对比
中央处理器(CPU)由对顺序串行处理优化的内核(通常是4~8个)组成。图形处理器(GPU)具有大规模并行架构,由数千个更小且更有效的核芯(大致以千计)组成,能够同时处理多个任务。
对于TensorFlow GPU版本,需要先安装CUDA Toolkit 7.0及以上版本、NVDIA【R】驱动程序和cuDNN v3或以上版本。Windows系统还需要一些DLL文件,读者可以下载所需的DLL文件或安装Visual Studio C++。
另外,cuDNN文件需安装在不同的目录中,并需要确保目录在系统路径中。当然也可以将CUDA库中的相关文件复制到相应的文件夹中。
2. TensorFlow安装步骤
TensorFlow的安装与配置过程可以参见附录D。
① 在命令行中使用以下命令创建conda环境(如果使用Windows,最好在命令行中以管理员身份执行)。
② 激活conda环境。
③ 根据需要,可以在conda环境中安装TensorFlow版本。
④ 在命令行中禁用conda环境。
3. 编写第一个TensorFlow程序
上面的代码实现的是最简单的神经网络向前传播过程,初始化x为一个1×2的矩阵,中间是三个神经元的隐藏层,w1,w2分别是初始化权重,是2×3和3×1的矩阵。最后通过计算得到y的值[[3.95757794]]。
这样,就完成了Python环境和TensorFlow的安装,可以开始运行最简单的深度案例。