第1章 搭建环境
1.1 安装Anaconda 2
1.2 安装CUDA及其加速器 3
1.3 安装TensorFlow 2.0 4
1.4 开发环境——Spyder 6
1.5 可视化分析工具——TensorBoard 7
第2章 机器学习与深度学习
2.1 机器学习 11
2.2 深度学习 13
第3章 构建神经网络模型
3.1 搭建一个全连接网络 17
3.2 确定要解决的问题 19
3.3 准备数据与数据预处理 20
3.3.1 数据集 22
3.3.2 拟合问题初探 23
3.3.3 数据集划分与数据污染 25
3.3.4 神经网络中的数据表示 26
3.3.5 张量操作 30
3.3.6 数据预处理 32
3.4 构建神经网络 34
3.4.1 构建神经网络的方法 34
3.4.2 理解Sequential Model的构建方法 35
3.4.3 理解layers与layer 37
3.4.4 理解models与model 39
3.4.5 理解Dense 39
3.4.6 激活函数 40
3.5 编译模型 42
3.5.1 优化器 43
3.5.2 损失函数 44
3.5.3 评价指标 46
3.6 训练模型 47
3.6.1 使用fit方法训练模型 47
3.6.2 使用fit_generator方法训练模型 51
3.6.3 使用TensorBoard回调函数训练模型 52
3.7 测试模型 59
3.7.1 性能评估 59
3.7.2 模型预测 60
3.8 保存模型 62
3.8.1 save方式 62
3.8.2 save_weights方式 63
3.8.3 SavedModel方式 64
3.9 使用模型 64
3.9.1 以save_weights方式保存的模型的加载方法 64
3.9.2 以save方式保存的模型的加载方法 65
3.9.3 以SavedModel方式保存的模型的加载方法 66
3.10 模型的重新训练与预测 66
3.11 使用模型在新数据上进行推理 69
第4章 全连接网络
4.1 全连接层 72
4.2 使用全连接网络解决文本分类问题 74
4.2.1 基于IMDB数据集的二分类任务 75
4.2.2 基于Reuters数据集的多分类任务 79
4.3 使用全连接网络解决标量回归问题 82
4.3.1 使用留出验证集方式训练模型 86
4.3.2 使用K折交叉验证方式训练模型 87
4.4 全连接网络图片分类问题的优化 88
4.4.1 降低模型容量:缩减模型的超参数 90
4.4.2 奥卡姆剃刀原则:正则化模型参数 91
4.4.3 初识随机失活:Dropout基础 92
第5章 卷积神经网络
5.1 使用CNN解决MNIST数据集的分类问题 96
5.2 全连接网络面临的问题 98
5.3 局部相关性与权值共享 100
5.4 构建卷积神经网络 102
5.4.1 CNN与Dense性能比较 102
5.4.2 卷积层 104
5.4.3 池化层 108
5.4.4 打平层 111
5.4.5 卷积神经网络基础架构 113
5.5 使用Conv1D解决二分类问题 115
5.5.1 EarlyStopping函数:训练终止 118
5.5.2 ModelCheckpoint函数:动态保存模型 120
5.5.3 再谈随机失活 122
第6章 循环神经网络
6.1 循环神经网络基础 126
6.1.1 序列 126
6.1.2 序列向量化 126
6.1.3 权值共享 130
6.1.4 全局语义 130
6.1.5 循环神经网络概述 131
6.1.6 循环层 132
6.2 SimpleRNN 133
6.2.1 序列数据的预处理 136
6.2.2 理解SimpleRNN层 137
6.3 LSTM网络 141
6.3.1 短时记忆与遗忘曲线 141
6.3.2 梯度问题 142
6.3.3 门控机制 143
6.3.4 理解LSTM层 144
6.4 GRU 151
6.4.1 LSTM网络面临的问题 151
6.4.2 门控机制的优化方法 152
6.4.3 理解GRU层 152
6.5 双向循环神经网络 159
6.5.1 双向LSTM网络 161
6.5.2 双向GRU 164
6.6 解决循环神经网络的拟合问题 167
6.6.1 通过正则化模型参数解决拟合问题 167
6.6.2 使用随机失活解决拟合问题 168
第7章 深度学习高阶实践
7.1 函数式API网络模型 173
7.1.1 如何实现层图共享 177
7.1.2 如何实现模型共享 180
7.1.3 如何实现模型组装与嵌套 183
7.1.4 如何实现多输入多输出模型 185
7.2 混合网络模型 189
7.3 基于Xception架构实现图片分类任务 191
7.3.1 Xception架构 191
7.3.2 使用image_dataset_from_directory函数构建数据集 194
7.3.3 数据增强技术 199
7.3.4 数据增强器的使用 201
7.3.5 二维深度分离卷积层:SeparableConv2D 202
7.3.6 数据标准化前置与中置 205
7.3.7 编译与训练模型 206
7.3.8 在新数据上进行推理 207
7.4 残差网络在CIFAR10数据集上的实践 208
7.4.1 CIFAR10数据集 208
7.4.2 深度残差网络:ResNet 209
7.4.3 基于ResNet构建多分类任务模型 211
7.5 GloVe预训练词嵌入实践 215
7.5.1 从原始文件构建训练集 216
7.5.2 解析并加载GloVe 220
7.5.3 在二分类模型中使用词嵌入矩阵 221
7.5.4 模型的编译与训练 222
7.5.5 构建测试集与模型评估 222
7.6 基于预训练网络VGG16完成图片分类任务 224
7.6.1 预训练网络 224
7.6.2 预训练网络之特征提取方法 225
7.6.3 预训练网络之微调模型方法 230
7.7 生成式深度学习实践 237
7.7.1 基于ResNet50的Deep Dream技术实践 238
7.7.2 基于VGG19网络的风格迁移实践 244
7.8 使用自定义回调函数监控模型的行为 253
7.8.1 将约束理论应用于模型调优 254
7.8.2 构建全局回调函数 255
7.8.3 构建epoch级的自定义回调函数 258
7.8.4 构建batch级的自定义回调函数 260
第8章 模型的工程封装与部署
8.1 深度学习模型的工程封装方法 263
8.2 使用Flask部署神经网络模型 264
8.2.1 Flask是什么 265
8.2.2 将模型部署成接口提供给第三方使用 267
8.2.3 深度学习模型与Web应用协同工作 270
8.3 基于TFX的部署实践 273
8.3.1 TensorFlow Serving服务模型 273
8.3.2 基于TensorFlow Serving与Docker部署深度学习模型 275
第9章 回顾与展望
9.1 神经网络的架构 281
9.2 构建神经网络模型的流程与实践 282
9.3 深度学习的局限性与展望 285