本教材从编程的角度“解剖”了深度学习的底层技术,通过介绍使用Python库实现经典的深度学习框架的过程,逐步向读者呈现深度学习的本质;用典型示例深入剖析深度学习在计算机视觉和自然语言处理方面的应用,同时介绍这些示例的TensorFlow实现,并在配套代码中给出相应的飞桨实现,以便读者深刻理解深度学习框架的技术细节;通过目标检测、中文文本分类、超越文本分类和视频动作识别等,为读者呈现最前沿的深度学习技术。本教材可作为高职院校人工智能相关专业学生的教材,也可作为相关培训机构的培训资料。对于广大的Python深度学习爱好者来说,本教材也是很好的参考用书。
程源,副教授,博士学历,毕业于清华大学,广东机电职业技术学院人工智能专业负责人。曾获得多个奖项,主持多项国家级、省级、校级科研课题。
第一部分 入门篇
1 深度学习概述 2
1.1 让机器学会学习 2
1.1.1 什么是人工智能 2
1.1.2 从数据中学习 3
1.1.3 数据表示 3
1.2 深度学习之“深度” 4
1.2.1 深度神经网络 5
1.2.2 神经网络的学习 7
1.3 深度学习的数据表示 9
1.3.1 标量、向量、矩阵与张量 9
1.3.2 现实世界中的张量数据 11
1.4 为什么要用深度学习 14
1.4.1 深度学习有何不同 14
1.4.2 深度学习的大众化 15
本章小结 15
2 神经网络入门 16
2.1 神经元 16
2.1.1 人工神经元 16
2.1.2 激活函数 18
2.2 多层神经网络 19
2.2.1 分类问题与独热编码 19
2.2.2 MNIST数据集 20
2.2.3 神经网络 22
2.2.4 神经网络的输出 23
2.2.5 softmax函数 24
2.3 神经网络的前向传播 26
2.3.1 各层间数据传递 27
2.3.2 多个样本情况 28
2.3.3 识别精度 29
2.4 监督学习与损失函数 30
2.4.1 监督学习 31
2.4.2 损失函数 32
2.5 梯度下降法 36
2.5.1 梯度下降 36
2.5.2 梯度的实现 38
2.5.3 梯度下降法的实现 39
2.6 学习算法的实现 41
2.6.1 两层神经网络模型 42
2.6.2 神经网络的训练 44
2.6.3 基于测试数据的评价 45
2.7 练习题 47
本章小结 47
3 神经网络的反向传播 48
3.1 反向传播的基础知识 48
3.2 反向传播的实现 49
3.2.1 ReLU层 49
3.2.2 sigmoid层 51
3.2.3 Linear层 51
3.2.4 softmax-with-Loss层 53
3.3 学习算法的实现 55
3.3.1 构建多层神经网络模型 55
3.3.2 随机梯度下降法 60
3.4 训练与预测 61
3.4.1 构建训练器 62
3.4.2 训练与推理 66
3.5 练习题 71
本章小结 72
4 改善神经网络 73
4.1 优化算法 73
4.1.1 动量法 75
4.1.2 AdaGrad 76
4.1.3 RMSprop 77
4.1.4 Adam 79
4.1.5 更新方法比较 80
4.1.6 改进训练器 82
4.2 数值稳定性和模型初始化 82
4.2.1 梯度消失和梯度爆炸 82
4.2.2 抑制梯度异常初始化 84
4.2.3 权重初始值的比较 85
4.3 正则化与规范化 87
4.3.1 过拟合与欠拟合 87
4.3.2 权值衰减 89
4.3.3 Dropout正则化 89
4.3.4 批量规范化 90
4.3.5 改进模型 93
4.4 练习题 95
本章小结 96
5 卷积神经网络 97
5.1 从全连接到卷积 97
5.1.1 卷积运算 97
5.1.2 填充 101
5.1.3 步幅 102
5.1.4 三维数据的卷积运算 103
5.2 卷积层 105
5.2.1 卷积计算 105
5.2.2 四维数组 107
5.2.3 基于im2col函数的展开 107
5.2.4 卷积层的实现 108
5.3 汇聚层 111
5.3.1 汇聚运算 112
5.3.2 汇聚层的实现 113
5.4 LeNet网络 114
5.4.1 构建模型 115
5.4.2 模型训练 120
5.4.3 预测 122
5.5 卷积神经网络的可视化 124
5.6 练习题 126
本章小结 127
6 深度学习实践 128
6.1 深度学习的工作流程 128
6.1.1 定义任务 128
6.1.2 开发模型 130
6.1.3 部署模型 133
6.2 训练一个图像分类模型 133
6.2.1 创建图像数据集 134
6.2.2 数据预处理 135
6.2.3 构建并训练模型 139
6.3 文本分类 143
6.3.1 准备文本数据 143
6.3.2 构建网络 149
6.4 练习题 151
本章小结 151
第二部分 实战篇
7 卷积神经网络进阶 154
7.1 深度学习框架 154
7.1.1 神经网络剖析 154
7.1.2 实现AlexNet网络 156
7.1.3 数据预处理 158
7.1.4 网络训练 159
7.2 数据增强 160
7.2.1 使用数据增强 160
7.2.2 训练网络 162
7.3 使用块的网络(VGG) 163
7.3.1 VGG块 163
7.3.2 VGG概述 164
7.3.3 训练模型 166
7.4 残差网络 169
7.4.1 残差块 169
7.4.2 ResNet 171
7.4.3 训练模型 173
7.5 微调模型 174
7.6 练习题 179
本章小结 180
8 目标检测 181
8.1 目标检测的基本概念 181
8.1.1 目标定位 181
8.1.2 正样本制作 182
8.1.3 交并比 186
8.1.4 先验框 187
8.1.5 非极大值抑制 189
8.2 YOLOv3 191
8.2.1 基本框架 191
8.2.2 产生候选区域 193
8.2.3 特征提取 194
8.2.4 解码预测结果 199
8.2.5 损失函数 203
8.3 训练自己的YOLOv3模型 208
8.3.1 数据集的准备 208
8.3.2 数据集的处理 208
8.3.3 开始网络训练 210
8.3.4 训练结果预测 211
8.4 练习题 212
本章小结 212
9 中文文本分类 213
9.1 词嵌入 213
9.1.1 什么是词嵌入 214
9.1.2 利用词嵌入 215
9.2 循环神经网络 217
9.2.1 循环神经网络概述 218
9.2.2 理解LSTM层 219
9.2.3 基于LSTM的中文文本分类 221
9.3 注意力机制 222
9.3.1 注意力提示 223
9.3.2 自注意力 224
9.3.3 多头注意力 226
9.4 Transformer 228
9.5 位置编码 230
9.6 练习题 232
本章小结 233
10 超越文本分类 234
10.1 序列到序列的学习 234
10.1.1 编码器-解码器架构 234
10.1.2 Transformer解码器 236
10.2 机器翻译 239
10.2.1 准备语料 239
10.2.2 端到端Transformer 243
10.3 文本生成 245
10.3.1 如何生成序列数据 245
10.3.2 采样策略的重要性 246
10.3.3 用keras实现文本生成 247
10.3.4 可变温度采样的文本生成 249
10.4 练习题 251
本章小结 252
11 视频动作识别 253
11.1 视频动作识别与数据集 253
11.1.1 数据集简介 253
11.1.2 数据集获取及划分 254
11.1.3 数据集预处理 255
11.2 基于CNN-RNN架构的视频分类 258
11.2.1 数据准备 259
11.2.2 创建序列模型 264
11.2.3 推断 265
11.3 基于Transformer的视频分类 267
11.3.1 数据准备 268
11.3.2 构建Transformer模型 271
11.3.3 模型推断 274
11.4 练习题 276
本章小结 276