本书通过聚焦于开发基于神经网络的解决方案来介绍机器学习,首先将从熟悉构建深度学习解决方案所需的概念和技术开始,然后介绍如何创建分类器、构建目标检测和语义分割神经网络、训练生成式模型,以及使用TF 2.0的工具,如TensorFlow Datasets和TensorFlow Hub,加速开发过程。学完本书之后,读者将能够使用TF 2.0开发任何机器学习问题的解决方案,并能将它们部署到生产环境之中。
译者序
前言
作者简介
审校者简介
第一部分 神经网络基础
第1章 什么是机器学习2
1.1 数据集的重要性3
1.1.1 n维空间5
1.1.2 维度诅咒8
1.2 有监督学习9
1.2.1 距离和相似性—k-NN算法10
1.2.2 参数模型11
1.2.3 评估模型性能—度量指标13
1.3 无监督学习18
1.4 半监督学习19
1.5 总结20
1.6 练习题20
第2章 神经网络与深度学习22
2.1 神经网络23
2.1.1 生物神经元23
2.1.2 人工神经元24
2.1.3 全连接层25
2.1.4 激活函数27
2.1.5 损失函数29
2.1.6 参数初始化30
2.2 优化31
2.2.1 梯度下降法32
2.2.2 梯度下降优化算法34
2.2.3 反向传播和自动微分37
2.3 卷积神经网络39
2.3.1 卷积运算符39
2.3.2 二维卷积40
2.3.3 卷间的二维卷积41
2.3.4 1×1×D卷积44
2.4 正则化45
2.4.1 dropout45
2.4.2 数据扩充48
2.4.3 早期停止48
2.4.4 批量归一化49
2.5 总结50
2.6 练习题51
第二部分 TensorFlow基础
第3章 TensorFlow图架构54
3.1 环境设置55
3.1.1 TensorFlow 1.x的环境设置56
3.1.2 TensorFlow 2.0的环境设置57
3.2 数据流图58
3.2.1 主要结构—tf.Graph60
3.2.2 图定义—从tf.Operation到tf.Tensor60
3.2.3 图放置—tf.device64
3.2.4 图执行—tf.Session66
3.2.5 静态图中的变量69
3.3 模型定义和训练72
3.3.1 用tf.layers定义模型72
3.3.2 自动微分—损失函数和优化器75
3.4 用Python操作图78
3.4.1 给占位符赋值79
3.4.2 总结记录80
3.4.3 保存模型参数和模型选择81
3.5 总结83
3.6 练习题85
第4章 TensorFlow 2.0架构86
4.1 重新学习这个框架87
4.2 Keras框架及其模型88
4.2.1 顺序API90
4.2.2 函数式API92
4.2.3 子类方法93
4.3 eager执行模式和新的特征94
4.3.1 基本示例94
4.3.2 函数,而不是会话96
4.3.3 不再有全局的东西97
4.3.4 控制流99
4.3.5 GradientTape 101
4.3.6 定制训练循环102
4.3.7 保存和恢复模型状态105
4.3.8 总结记录和指标度量107
4.3.9 AutoGraph111
4.4 代码库迁移115
4.5 总结117
4.6 练习题117
第5章 高效的数据输入流水线和估计器API120
5.1 高效的数据输入流水线121
5.1.1 输入流水线的结构121
5.1.2 tf.data.Dataset对象122
5.1.3 性能优化125
5.1.4 构建自己的数据集126
5.1.5 数据扩充127
5.1.6 TensroFlow 数据集—tdfs128
5.1.7 Keras整合130
5.1.8 eager整合131
5.2 估计器API132
5.2.1 数据输入流水线134
5.2.2 定制估计器136
5.2.3 预制估计器139
5.3 总结140
5.4 练习题141
第三部分 神经网络应用
第6章 使用TensorFlow Hub进行图像分类144
6.1 获取数据145
6.2 迁移学习147
6.2.1 TensorFlow Hub149
6.2.2 使用Inception v3作为特征提取器150
6.2.3 使数据适应模型152
6.2.4 建立模型—hub.KerasLayer152
6.2.5 训练与评估154
6.2.6 训练速度155
6.3 微调156
6.3.1 何时微调157
6.3.2 TensorFlow Hub集成157
6.3.3 训练和评估158
6.3.4 训练速度159
6.4 总结159
6.5 练习题160
第7章 目标检测162
7.1 获取数据163
7.2 目标定位167
7.2.1 定位是一个回归问题168
7.2.2 IoU173
7.2.3 平均精度175
7.2.4 平均精度均值175
7.2.5 改进训练脚本176
7.3 分类和定位177
7.3.1 多任务学习177
7.3.2 双头网络178
7.3.3 基于锚的检测器180
7.3.4 锚框180
7.4 总结182
7.5 练习题182
第8章 语义分割和自定义数据集生成器184
8.1 语义分割184
8.1.1 挑战185
8.1.2 反卷积—转置卷积186
8.1.3 U-Net架构187
8.2 创建一个TensorFlow数据集生成器191
8.2.1 层次化结构192
8.2.2 数据集类和DatasetInfo193
8.2.3 创建数据集分割194
8.2.4 生成示例195
8.2.5 使用生成器198
8.3 模型训练与评估198
8.3.1 数据准备199
8.3.2 训练循环和Keras回调函数199
8.3.3 评估与推论201
8.4 总结203
8.5 练习题204
第9章 生成式对抗网络206
9.1 了解GAN及其应用206
9.1.1 价值函数207
9.1.2 非饱和价值函数208
9.1.3 模型定义和训练阶段208
9.1.4 GAN的应用209
9.2 无条件的GAN211
9.2.1 准备数据211
9.2.2 定义生成器212
9.2.3 定义鉴别器213
9.2.4 定义损失函数214
9.2.5 无条件的GAN中的对抗训练过程215
9.3 有条件的GAN219
9.3.1 为有条件的GAN获取数据220
9.3.2 在有条件的GAN中定义生成器220
9.3.3 在有条件的GAN中定义鉴别器221
9.3.4 对抗训练过程222
9.4 总结223
9.5 练习题224
第10章 在生产环境中部署模型226
10.1 SavedModel序列化格式226
10.1.1 特征227
10.1.2 通过Keras模型创建SavedModel 228
10.1.3 使用通用函数进行SavedModel转换229
10.2 Python部署231
10.2.1 通用计算图 231
10.2.2 Keras模型 233
10.2.3 平面图234
10.3 支持部署的平台235
10.3.1 TensorFlow.js236
10.3.2 Go绑定和tfgo240
10.4 总结243
10.5 练习题244