深度学习可用的工具很多,例如,Google开发的深度学习平台TensorFlow。但是TensorFlow使用起来相对复杂,所以本教材使用易用性更好的Keras来讲解深度学习的具体实现。
Keras是由纯Python编写的深度学习框架,使用TensorFlow、Pytorch或者CNTK作为后端运行。用纯Python编写意味着所有的Keras代码都是通过Python语句实现的,可以通过Python的代码编辑工具打开源代码进行学习。在学习Python编程的过程中,阅读Keras经典模块的Python代码是一种非常好的学习方式。
在Keras开发团队写的官方文档中,他们详细说明了设计Keras时遵循的原则。
(1)用户友好
Keras是为人类而不是“天顶星人”①设计的API,用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API,能够极大减少一般应用下用户的工作量,同时,Keras还提供清晰和具有实践意义的bug反馈。
(2)模块性
模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。
(3)易扩展性
添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。
(4)与Python协作
Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由Python代码描述,这样可以使其更紧凑和更易debug,也更易扩展。
作为一种高级深度学习工具,Keras构造深度学习网络简单直接、容易阅读,同时它能够自动构建层与层之间的连接,更便于学习者体会深度学习的能力。选用Keras作为深度学习的入门工具的原因如下。
数学知识较少的前提下,Keras可以进行简易和快速的原型设计,因为它具有高度模块化、极简和可扩充的特性。这里的模块化意味着可以直接调用许多模块,只需要知道模块的输入输出,而不必关心模块是如何实现的。通俗地讲,这种模块化的特性使得构建深度学习模型变得像搭积木一样容易。
Keras可以很方便地构建深度学习的两种重要的深度神经网络——卷积神经网络和递归神经网络,并且支持它们的组合。
深度学习的计算很多时候需要使用GPU,Keras可以在CPU和GPU之间实现无缝切换,这意味着使用者不必关心具体是通过CPU还是GPU计算,只需要关心训练结果即可。
图7-2给出了Keras的模块结构,其中有些是比较复杂的,读者现在还不需要完全了解它们,只需要了解到它们大致分成了下述六个部分,请结合后续的实例理解各个模块的含义和作用。
图7-2 Keras的模块结构(来自Keras文档)
(1)后端
后端相当于底层计算接口,所有Keras编写的程序最后都会转化成TensorFlow的程序来运行。更直观地说,后端可以看作Keras和TensorFlow之间的翻译器,而Keras会自动完成这个翻译过程。
(2)网络配置
顾名思义,网络配置是与网络结构有关的各种参数。这里的网络指的是深度学习中的深度神经网络,可以将深度网络比喻成高楼大厦,这一部分就是与高楼大厦有关的各种结构和参数。例如,楼有几层,使用什么材料建造,每层层高多少米等。需要说明的是,这一部分并没有看起来那么简单,甚至某种意义上这部分是深度学习的精华和难点,往往需要多年的实践经验才能针对特定问题给出恰当的网络配置。读者们可以慢慢加强这方面的学习和思考。
(3)数据预处理
进行深度学习之前,通常要对数据进行处理。需要注意,本教材所提供的数据都是经过处理的,这是理想状况。很多实际问题中的数据并不是拿来就可以直接作为神经网络的原始输入数据的。例如,最简单的需要处理数据的情形就是数据缺失,也就是某些样本没有数值,这也是需要“预先”处理的,所以这个过程被形象地称为数据预处理。
(4)模型
Keras支持两种模型,一种是序贯模型,一种是函数式模型。本书主要使用序贯模型,但不会对这两种模型进行深入探讨。感兴趣的读者可以在掌握了本书内容后进一步学习。
(5)网络层
Keras支持大多数深度学习所使用的“网络层”。这些网络层可以形象地比喻成建筑用的各种建筑工具,如房梁、钢骨等,由它们构成最终的深度神经网络。
(6)输出
输出是给出深度学习最终结果的部分。例如,通过输出0和1来表示蘑菇是否有毒,0表示有毒,而1表示可食用。
使用Keras同样需要安装。在Window下安装Keras并不麻烦,但是由于Keras需要TensorFlow的支持,所以安装Keras之前需要先安装TensorFlow。TensorFlow有CPU版和GPU版两种选择,首先需要判断你的设备是否支持显卡计算,这就决定了你需要安装哪一种TensorFlow。可通过英伟达(NVIDIA)官网查询支持显卡计算的显卡列表。如你的显卡出现在列表中,建议安装GPU版,因为在很多情况下,这会大大加速计算过程。否则只能安装CPU版。
在Windows 10中,可通过“设备管理器”查看显卡型号,如图7-3所示。其中在显示适配器(GPU)中可以看到计算机的显卡型号。以图7-3为例,显示该机器有两块显卡,一块是Intel自带的显卡G620,一块是NVIDIA的Geforce GTX 1060,其中第二块显卡是支持GPU计算的。如果想使用它,就需要安装GPU版的TensorFlow。
图7-3 设备管理器示意图(突出显示的部分就是显卡)
因为CPU版的TensorFlow安装更简单,所以下面以GPU版为例说明安装过程。在Windows中,Keras的整个安装过程比较复杂,一共分成9步,且顺序不能随意改变。具体步骤如下。
①下载并安装Python发行版,如WinPython或者Anaconda,具体细节可以参考第二章。
②为了加快安装过程中所需模块的下载速度,请添加国内镜像。以添加清华大学提供的镜像源为例,在用户文件夹 C:\Users\math(math是笔者计算机上的目录名称)建立pip.ini文件。
[global]
index-url=https://mirrors.tuna.tsinghua.edu.cn/
[install]
trusted-host=https://mirrors.tuna.tsinghua.edu.cn/
③非常重要的是,GPU计算需要利用C++,这需要下载Visual Studio 2015(注意,在本书编写过程中,该版本是最适合的,不要安装更高版本),图7-4显示了安装过程。
图7-4 Visual Studio Community安装
④接下来从NVIDIA的开发者网站下载CUDA并安装,需要注意TensorFlow 1.7对应的CUDA版本是9.0(不要下载9.1版本)。而如果安装的是TensorFlow 1.2,则需要安装CUDA 8.0。
⑤接下来安装CUDNN 7.1,它也可以从NVIDIA开发者网站下载。将下载的CUDNN解压,解压后有三个文件夹,分别是bin、include和lib,将它们放到Program Files/NVIDIA GPU Computing Tookit/CUDA/v9.0中,如图7-5所示。
图7-5 配置示意图
⑥安装GPU版的TensorFlow。从TensorFlow官网下载最新的GPU版本,通过在命令行窗口输入
pip install tensorflow_gpu-1.7.0-cp36-cp36m-win_amd64.whl
安装所需的GPU版TensorFlow。
这里tensorflow_gpu-1.7.0-cp36-cp36m-win_amd64.whl是下载的文件名,其中的1.7.0是版本号,版本不同会有所区别。
某些情况下可能需要更新pip,这可以通过如下命令实现
python -m pip install –upgrade pip
图7-6显示的就是安装TensorFlow的过程。
图7-6 安装GPU版TensorFlow
⑦接下来通过下述方式查看TensorFlow是否安装完成。
In[45]:from TensorFlow.Python.client import device_libas
_device_lib
In[46]:local_device_protos=_device_lib.list_local
_devices()
In[47]:local_device_protos
Out[47]:
[name:"/device:CPU:0"
device_type:"CPU"
memory_limit:268435456
locality {}
incarnation:1987868172902998319,name:"/device:GPU:0"
device_type:"GPU"
memory_limit:4980893286
locality {
bus_id:1
links {}
}
incarnation:16631691530492819808
physical_device_desc:"device:0,name:GeForce GTX 1060,pci
bus id:0000:02:00.0,compute capability:6.1"]
如果显示了类似的显卡配置,则说明安装顺利完成。
⑧查看TensorFlow是否已经支持GPU计算。可以通过如下命令在命令行窗口输出的结果中查看是否已经支持GPU计算(图7-7)。
import TensorFlow as tf
a=tf.random_normal((100,100))
b=tf.random_normal((100,500))
c=tf.matmul(a,b)
sess=tf.InteractiveSession()
sess.run(c)
图7-7 TensorFlow计算体验
⑨安装完TensorFlow后,在命令行窗口使用如下命令
pip install keras
安装完Keras,整个Keras环境就构建完毕了。