
随着人工智能技术的发展,深度学习成为最受关注的领域之一。在深度学习的诸多开发框架中,
TensorFlow 是最受欢迎的开发框架。
本书以培养人工智能编程思维和技能为核心,以工作过程为导向,采用任务驱动的方式组织内容。全
书共分为8 个任务,任务1 介绍深度学习的发展历程、应用领域以及开发环境的搭建过程;任务2 介绍
TensorFlow 框架的基本原理、计算图、会话、张量等概念;任务3 和任务4 阐述全连接神经网络模型、神
经网络优化方法及反向传播算法;任务5 和任务6 讨论卷积神经网络、卷积、池化的原理;任务7 和任务8
演示网络模型可视化操作步骤及制作与解析数据集的方法。
本书既可作为大数据、人工智能等相关专业应用型人才的教学用书,也可以作为TensorFlow 初学者的
学习参考书。
前 言
随着人工智能技术的发展,深度学习成为广受关注的领域。面向深度学习的开发框架不断涌现,但毫无疑问,TensorFlow 是其中最受欢迎的一款开源框架。
本书以培养读者的人工智能编程思维和技能为核心,以工作过程为导向,采用项目驱动的方式组织内容。具体来说,本书的编写思路和特色如下。
(1)在内容设计上,坚持由浅入深。
本书以PyCharm 和TensorFlow 1.10 为平台,介绍了深度学习的概念及其应用领域、TensorFlow 的语言基础、构建二维线性拟合模型、可视化模型、全连接网络构建手写字模型以及AlexNet 网络模型,最后讲到了模型的微调。由浅入深,层层递进,使读者一步步掌握深度学习的原理和技巧。
(2)在内容编排上,坚持以实践、应用为导向。
学习深度学习,需要有深厚的数理基础,这对初学者来说有一定的难度。本书从实践和应用出发,淡化理论,通过大量具体的例子来引导读者学习TensorFlow 编程技巧。
在实践内容的选择上,则尽可能从实用性和趣味性两方面进行考量,选择MNIST 图像识别的入门项目以及AlexNet 图像识别项目,使读者在实践中逐渐加深领悟,并最终掌握深
度学习的开发技巧。
(3)在具体知识点介绍上,尽量做到清晰而有深度。
编写过程中,尽量用简单的语言描述算法原理,做到条理清晰。
本书各章节的内容安排如下。
任务1:主要介绍人工智能的发展历程、人工智能与深度学习、人工智能与计算机视觉、人工智能与自然语言处理的关系以及TensorFlow 深度学习开发环境的搭建过程。
任务2:介绍深度学习的基本概念,使读者通过计算图、会话、数据喂入、模型的保存与恢复等理解深度学习模型。
任务3:阐述全连接神经网络模型架构、网络模型的优化方法、学习率、损失函数、向后传播等基本概念。
任务4:以MNIST 手写字模型为基础,介绍数据集的下载方法、标签转换为one-hot、图像转换为矩阵等展示;然后搭建全连接神经网络训练手写字模型;最后检验该模型的正确性。
任务5:讨论卷积神经网络模型。首先介绍传统的全连接神经网络模型的权限,以及卷积神经网络的网络结构;然后讲解卷积、池化以及特征提取、多通道、多卷积核卷积的概念;最后以LeNet-5 模型为基础,搭建手写字模型,提高网络训练的准确率。
任务6:以AlexNet 卷积神经网络模型为基础,构建物体识别模型。首先介绍CIFAR-10 数据集的特性、数据集的下载方法以及数据集图片和标签的展示;然后阐述如何通过数据增强的方式扩大数据集,从而增强模型的泛化性;最后通过构建网络模型,
识别不同种类的物体。
任务7:以TensorBoard 为基础,展示了神经网络的可视化方法。首先介绍Tensor-Board 可视化环境的搭建与配置过程;然后介绍标量、计算图、分布图等不同元素可视化的方法;最后通过可视化性别识别模型,使读者理解神经网络的训练过程。
任务8:阐述TensorFlow 最新的数据处理框架。首先介绍tf.data 数据处理框架的基本机制、迭代器的基本概念;然后讲解数据集的构建与解析过程;最后介绍数据批处理的基本机制。
本书由谷瑞、陈强、谭冠兰主笔编写。参与本书编写的人员还有罗颖、淡海英、盛雪丰、李露、王玉丽、徐迎春、茹新宇、胡海明、马千里等。
在本书的编写过程中,苏永新、谭传艺、文逸、沈杨怡等同学提供了大量帮助,为本书的编写搜集了大量案例。江苏千森信息科技有限公司提供了力所能及的帮助。正是有了他们专心细致的工作,才使得本书的内容更加丰富。在此,对他们表示深深的
感谢。
虽然在编写过程中,对书中所述内容已尽量核实、修正,并多次进行了文字校对,但因时间仓促,水平有限,书中的疏漏和错误之处在所难免,敬请广大读者批评指正。
谷 瑞
2020 年4 月
任务1 深度学习简介与开发环境搭建???????????????????????????????????????????????????????????????????????????? 1
1.1 深度学习的发展及应用???????????????????????????????????????????????????????????????????????????????????????????? 1
1.1.1 深度学习的发展历程????????????????????????????????????????????????????????????????????????????????????? 1
1.1.2 深度学习的应用领域????????????????????????????????????????????????????????????????????????????????????? 4
1.2 深度学习框架简介???????????????????????????????????????????????????????????????????????????????????????????????????? 7
1.2.1 TensorFlow ????????????????????????????????????????????????????????????????????????????????????????????????????? 7
1.2.2 Caffe ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? 8
1.2.3 PyTorch??????????????????????????????????????????????????????????????????????????????????????????????????????????? 8
1.2.4 MXNet ???????????????????????????????????????????????????????????????????????????????????????????????????????????? 8
1.2.5 不同框架的对比????????????????????????????????????????????????????????????????????????????????????????????? 9
1.3 开发环境搭建???????????????????????????????????????????????????????????????????????????????????????????????????????????? 9
1.3.1 Windows 环境下的安装配置????????????????????????????????????????????????????????????????????????? 9
1.3.2 Linux 环境下的安装配置??????????????????????????????????????????????????????????????????????????????20
1.4 本章小结??????????????????????????????????????????????????????????????????????????????????????????????????????????????????25
1.5 本章习题??????????????????????????????????????????????????????????????????????????????????????????????????????????????????26
任务2 构建二维数据拟合模型????????????????????????????????????????????????????????????????????????????????????? 28
2.1 TensorFlow 运行机制???????????????????????????????????????????????????????????????????????????????????????????????28
2.1.1 TensorFlow 系统架构????????????????????????????????????????????????????????????????????????????????????29
2.1.2 构建计算图???????????????????????????????????????????????????????????????????????????????????????????????????30
2.1.3 在会话中运行计算图????????????????????????????????????????????????????????????????????????????????????31
2.1.4 指定GPU 设备??????????????????????????????????????????????????????????????????????????????????????????????34
2.2 TensorFlow 数据模型???????????????????????????????????????????????????????????????????????????????????????????????35
2.2.1 张量及属性???????????????????????????????????????????????????????????????????????????????????????????????????35
2.2.2 类型转换???????????????????????????????????????????????????????????????????????????????????????????????????????38
2.2.3 形状变换???????????????????????????????????????????????????????????????????????????????????????????????????????39
2.3 变量的定义与使用???????????????????????????????????????????????????????????????????????????????????????????????????40
2.3.1 变量的定义与初始化????????????????????????????????????????????????????????????????????????????????????40
2.3.2 随机初始化变量????????????????????????????????????????????????????????????????????????????????????????????41
2.3.3 获取变量???????????????????????????????????????????????????????????????????????????????????????????????????????42
2.3.4 共享变量???????????????????????????????????????????????????????????????????????????????????????????????????????43
2.4 占位符与数据喂入机制???????????????????????????????????????????????????????????????????????????????????????????44
2.4.1 占位符定义???????????????????????????????????????????????????????????????????????????????????????????????????44
2.4.2 数据喂入???????????????????????????????????????????????????????????????????????????????????????????????????????45
2.5 模型的保存与恢复???????????????????????????????????????????????????????????????????????????????????????????????????45
2.5.1 模型保存???????????????????????????????????????????????????????????????????????????????????????????????????????45
2.5.2 模型恢复???????????????????????????????????????????????????????????????????????????????????????????????????????47
2.6 构建二维数据拟合模型???????????????????????????????????????????????????????????????????????????????????????????48
2.6.1 准备数据???????????????????????????????????????????????????????????????????????????????????????????????????????48
2.6.2 搭建模型???????????????????????????????????????????????????????????????????????????????????????????????????????49
2.6.3 反向传播???????????????????????????????????????????????????????????????????????????????????????????????????????49
2.6.4 迭代训练???????????????????????????????????????????????????????????????????????????????????????????????????????50
2.6.5 使用模型???????????????????????????????????????????????????????????????????????????????????????????????????????51
2.7 本章小结??????????????????????????????????????????????????????????????????????????????????????????????????????????????????51
2.8 本章习题??????????????????????????????????????????????????????????????????????????????????????????????????????????????????52
任务3 构建泰坦尼克号生还率模型????????????????????????????????????????????????????????????????????????????? 55
3.1 M-P 神经元拟合原理???????????????????????????????????????????????????????????????????????????????????????????????55
3.1.1 M-P 神经元模型????????????????????????????????????????????????????????????????????????????????????????????55
3.1.2 训练神经元???????????????????????????????????????????????????????????????????????????????????????????????????58
3.2 激活函数实现神经元非线化???????????????????????????????????????????????????????????????????????????????????59
3.2.1 激活函数的作用????????????????????????????????????????????????????????????????????????????????????????????59
3.2.2 Sigmoid 激活函数?????????????????????????????????????????????????????????????????????????????????????????59
3.2.3 Tanh 激活函数???????????????????????????????????????????????????????????????????????????????????????????????61
3.2.4 Relu 激活函数???????????????????????????????????????????????????????????????????????????????????????????????62
3.3 BP 神经网络模型?????????????????????????????????????????????????????????????????????????????????????????????????????63
3.3.1 BP 神经网络结构??????????????????????????????????????????????????????????????????????????????????????????64
3.3.2 神经网络向前传输推导????????????????????????????????????????????????????????????????????????????????65
3.3.3 神经网络向前传输实践????????????????????????????????????????????????????????????????????????????????67
3.3.4 构建BP 神经网络模型?????????????????????????????????????????????????????????????????????????????????68
3.4 损失函数调整误差???????????????????????????????????????????????????????????????????????????????????????????????????71
3.4.1 交叉熵损失函数????????????????????????????????????????????????????????????????????????????????????????????71
3.4.2 均方误差损失函数????????????????????????????????????????????????????????????????????????????????????????72
3.5 梯度下降??????????????????????????????????????????????????????????????????????????????????????????????????????????????????72
3.5.1 梯度下降的作用及常用方法????????????????????????????????????????????????????????????????????????72
3.5.2 梯度下降使模型最小偏差实践????????????????????????????????????????????????????????????????????74
3.6 模型优化??????????????????????????????????????????????????????????????????????????????????????????????????????????????????75
3.6.1 学习率控制参数更新速度????????????????????????????????????????????????????????????????????????????75
3.6.2 正则化减少过拟合现象????????????????????????????????????????????????????????????????????????????????76
3.7 构建泰坦尼克号生还率模型???????????????????????????????????????????????????????????????????????????????????80
3.7.1 数据读取及预处理????????????????????????????????????????????????????????????????????????????????????????80
3.7.2 搭建向前传输过程????????????????????????????????????????????????????????????????????????????????????????82
3.7.3 迭代训练???????????????????????????????????????????????????????????????????????????????????????????????????????82
3.8 本章小结??????????????????????????????????????????????????????????????????????????????????????????????????????????????????83
3.9 本章习题??????????????????????????????????????????????????????????????????????????????????????????????????????????????????83
任务4 构建手写字识别模型???????????????????????????????????????????????????????????????????????????????????????? 86
4.1 MNIST 数据集?????????????????????????????????????????????????????????????????????????????????????????????????????????86
4.1.1 MNIST 数据集简介???????????????????????????????????????????????????????????????????????????????????????86
4.1.2 下载MNIST 数据集??????????????????????????????????????????????????????????????????????????????????????88
4.1.3 图像的矩阵表示????????????????????????????????????????????????????????????????????????????????????????????89
4.1.4 标签的独热表示????????????????????????????????????????????????????????????????????????????????????????????90
4.2 构建识别MNIST 模型?????????????????????????????????????????????????????????????????????????????????????????????91
4.2.1 MNIST 手写字模型简介???????????????????????????????????????????????????????????????????????????????91
4.2.2 定义模型节点参数????????????????????????????????????????????????????????????????????????????????????????92
4.2.3 网络向前传输过程????????????????????????????????????????????????????????????????????????????????????????93
4.2.4 网络参数优化????????????????????????????????????????????????????????????????????????????????????????????????94
4.2.5 训练并保存模型????????????????????????????????????????????????????????????????????????????????????????????95
4.3 模型验证??????????????????????????????????????????????????????????????????????????????????????????????????????????????????96
4.3.1 验证集验证模型????????????????????????????????????????????????????????????????????????????????????????????96
4.3.2 识别自定义图片????????????????????????????????????????????????????????????????????????????????????????????97
4.4 本章小结???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 100
4.5 本章习题???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 100
任务5 LeNet-5 模型识别手写字???????????????????????????????????????????????????????????????????????????????? 102
5.1 卷积神经网络结构特征????????????????????????????????????????????????????????????????????????????????????????? 102
5.1.1 卷积神经网络简介?????????????????????????????????????????????????????????????????????????????????????? 102
5.1.2 卷积物理含义?????????????????????????????????????????????????????????????????????????????????????????????? 104
5.1.3 网络结构特征?????????????????????????????????????????????????????????????????????????????????????????????? 106
5.2 卷积神经网络函数????????????????????????????????????????????????????????????????????????????????????????????????? 108
5.2.1 卷积操作????????????????????????????????????????????????????????????????????????????????????????????????????? 108
5.2.2 池化操作????????????????????????????????????????????????????????????????????????????????????????????????????? 112
5.2.3 DropOut 机制??????????????????????????????????????????????????????????????????????????????????????????????? 116
5.3 卷积高级操作????????????????????????????????????????????????????????????????????????????????????????????????????????? 118
5.3.1 多通道卷积????????????????????????????????????????????????????????????????????????????????????????????????? 118
5.3.2 多卷积核????????????????????????????????????????????????????????????????????????????????????????????????????? 120
5.3.3 反卷积????????????????????????????????????????????????????????????????????????????????????????????????????????? 122
5.4 LeNet-5 识别手写字??????????????????????????????????????????????????????????????????????????????????????????????? 124
5.4.1 LeNet-5 模型简介???????????????????????????????????????????????????????????????????????????????????????? 124
5.4.2 构建向前传输模型?????????????????????????????????????????????????????????????????????????????????????? 125
5.4.3 优化模型????????????????????????????????????????????????????????????????????????????????????????????????????? 128
5.4.4 训练保存模型?????????????????????????????????????????????????????????????????????????????????????????????? 130
5.4.5 验证模型????????????????????????????????????????????????????????????????????????????????????????????????????? 131
5.5 本章小结???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 132
5.6 本章习题???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 133
任务6 打造CIFAR-10 图像识别模型???????????????????????????????????????????????????????????????????????? 136
6.1 CIFAR-10 数据集简介??????????????????????????????????????????????????????????????????????????????????????????? 136
6.1.1 CIFAR-10 数据集简介???????????????????????????????????????????????????????????????????????????????? 136
6.1.2 下载CIFAR-10 数据集??????????????????????????????????????????????????????????????????????????????? 137
6.2 读取CIFAR-10 数据?????????????????????????????????????????????????????????????????????????????????????????????? 138
6.2.1 读取并显示图片?????????????????????????????????????????????????????????????????????????????????????????? 138
6.2.2 将标签表示成独热?????????????????????????????????????????????????????????????????????????????????????? 139
6.3 数据增强???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 140
6.3.1 图像几何变换?????????????????????????????????????????????????????????????????????????????????????????????? 140
6.3.2 图像色彩调整?????????????????????????????????????????????????????????????????????????????????????????????? 144
6.3.3 图像的标准化?????????????????????????????????????????????????????????????????????????????????????????????? 146
6.3.4 图像标注????????????????????????????????????????????????????????????????????????????????????????????????????? 147
6.4 构建CIFAR-10 图像识别模型?????????????????????????????????????????????????????????????????????????????? 149
6.4.1 数据批量读取?????????????????????????????????????????????????????????????????????????????????????????????? 149
6.4.2 模型构建????????????????????????????????????????????????????????????????????????????????????????????????????? 150
6.4.3 训练并预测????????????????????????????????????????????????????????????????????????????????????????????????? 154
6.5 ImageNet 图像识别模型????????????????????????????????????????????????????????????????????????????????????????? 155
6.5.1 ImageNet 数据集简介????????????????????????????????????????????????????????????????????????????????? 155
6.5.2 历代ImageNet 识别模型???????????????????????????????????????????????????????????????????????????? 156
6.6 本章小结???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 158
6.7 本章习题???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 158
任务7 可视化性别识别模型?????????????????????????????????????????????????????????????????????????????????????? 160
7.1 在程序中使用TensorBoard ??????????????????????????????????????????????????????????????????????????????????? 160
7.1.1 TensorBoard 基本介绍???????????????????????????????????????????????????????????????????????????????? 160
7.1.2 TensorBoard 使用步骤???????????????????????????????????????????????????????????????????????????????? 161
7.2 TensorBoard 可视化??????????????????????????????????????????????????????????????????????????????????????????????? 163
7.2.1 标量与直方图可视化?????????????????????????????????????????????????????????????????????????????????? 163
7.2.2 卷积过程可视化?????????????????????????????????????????????????????????????????????????????????????????? 167
7.2.3 训练过程可视化?????????????????????????????????????????????????????????????????????????????????????????? 171
7.3 可视化性别识别模型????????????????????????????????????????????????????????????????????????????????????????????? 174
7.3.1 模型简介????????????????????????????????????????????????????????????????????????????????????????????????????? 174
7.3.2 读取数据集????????????????????????????????????????????????????????????????????????????????????????????????? 175
7.3.3 训练模型????????????????????????????????????????????????????????????????????????????????????????????????????? 176
7.3.4 可视化模型????????????????????????????????????????????????????????????????????????????????????????????????? 179
7.4 本章小结???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 180
7.5 本章习题???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 180
任务8 理解tf.data 数据处理框架?????????????????????????????????????????????????????????????????????????????? 182
8.1 Dataset 的基本机制???????????????????????????????????????????????????????????????????????????????????????????????? 182
8.1.1 Dataset 数据处理框架????????????????????????????????????????????????????????????????????????????????? 182
8.1.2 创建Dataset ???????????????????????????????????????????????????????????????????????????????????????????????? 183
8.2 Iterator 迭代数据集???????????????????????????????????????????????????????????????????????????????????????????????? 184
8.2.1 单次迭代器????????????????????????????????????????????????????????????????????????????????????????????????? 184
8.2.2 可初始化迭代器?????????????????????????????????????????????????????????????????????????????????????????? 185
8.2.3 可重新初始化迭代器?????????????????????????????????????????????????????????????????????????????????? 186
8.2.4 可馈送迭代器?????????????????????????????????????????????????????????????????????????????????????????????? 187
8.3 Dataset 数据批处理???????????????????????????????????????????????????????????????????????????????????????????????? 188
8.3.1 直接批处理????????????????????????????????????????????????????????????????????????????????????????????????? 188
8.3.2 预处理后批处理?????????????????????????????????????????????????????????????????????????????????????????? 189
8.4 Dataset 数据集构建与解析???????????????????????????????????????????????????????????????????????????????????? 190
8.4.1 数据集预处理?????????????????????????????????????????????????????????????????????????????????????????????? 190
8.4.2 构建TFRecordDataset 数据集???????????????????????????????????????????????????????????????????? 191
8.4.3 从tf.train.Example 中解析数据??????????????????????????????????????????????????????????????????? 192
8.5 本章小结???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 193
8.6 本章习题???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 194
附录人工智能数学基础????????????????????????????????????????????????????????????????????????? 196
以培养人工智能编程思维和技能为核心,采用任务驱动的方式组织内容。学习深度学习,需要有深厚的数学基础,这对初学者来说有一定难度。本书从实践和应用出发,淡化理论,通过大量具体的例子来引导读者学习TensorFlow编程技巧。本书在附录有人工智能数学基础,方便初学者和高职院校的学生随时查阅所需数学公式。
谷瑞,副教授、苏州工业园区服务外包职业学院大数据技术与应用专业主任,苏州大学高级访问学者,英伟达计算机视觉与自然语言处理认证讲师,以第一作者发表SCI、EI检索论文5篇、主持省十三五教育科学规划课题1项、参与企业横向项目20余项,具有丰富的项目实战经验。