- 理解TensorFlow模型模式和ML工作流中的最佳实践。
- 使用代码段作为构建TensorFlow模型和工作流的模板。
- 通过集成TensorFlow Hub中的预建模型节省开发时间。
- 使用加速器集群(如GPU或TPU)充分利用分布式训练。
- 对数据摄取、训练模型、模型保存和推理做出明智的设计选择。
这是一本使用Python实现TensorFlow设计模式的简明参考书,可以帮助你对各种不同用例做出明智的决策。本书作者并不是只强调TensorFlow本身,而是全面地介绍了数据科学和机器学习领域中的常见主题和任务。
什么时候使用NumPy或流式数据集提供训练数据?为什么?训练过程中你要如何建立数据转换和工作流?如何使用迁移学习充分利用一个预训练的模型?如何完成超参数调优?选择这本书,它会大大减少你为TensorFlow用例搜寻选择方案花费的时间。
前言
TensorFlow 生态系统已经演化为很多不同的框架,为各种不同的角色和功能提供服务。这种灵活性一定程度上解释了为什么TensorFlow 得到了广泛采用,不过这也使数据科学家、机器学习(Machine Learning,ML)工程师和其他技术相关者的学习曲线变得复杂化。对于常见的任务,如数据和特征工程、数据摄取、模型选择、训练模式、针对过拟合的交叉验证以及部署策略,管理TensorFlow模型的方法有很多,这就带来了大量繁复的选择。
本书将帮助你选择如何使用TensorFlow 开展工作,包括如何在Python 中使用TensorFlow 2.0 设计模式建立常用的数据科学和ML 工作流。书中的示例将描述并演示TensorFlow 编码模式以及你在ML 项目工作中可能经常遇到的其他任务。
可以把它作为一个指南,也可以作为一本参考书。
这本书面向当前以及未来的ML工程师、数据科学家和企业ML解决方案架构师,他们希望增进自己在TensorFlow 建模的可重用模式和最佳实践方面的知识和经验。你可能已经读过一本入门的TensorFlow 书,而且时刻跟踪数据科学领域的发展,对此已经有基本的了解。本书假设你有使用Python(可能还有NumPy、pandas 和JSON 库)完成数据工程和特征工程以及构建TensorFlow 模型的实践经验。如果你熟悉常用的一些数据结构(如列表、字典和NumPy 数组),这些经验也会很有帮助。
与很多其他TensorFlow 书不同,这本书重点关注你要完成的任务,并围绕这个中心组织全书内容,包括:
何时以及为什么采用NumPy 数组或流式数据集提供训练数据(第2 章和第5 章)?
如何使用迁移学习充分利用预训练的模型(第3 章和第4 章)?
使用一个通用的fit 函数完成训练还是编写一个自定义训练循环(第6 章)?
如何管理和使用模型检查点(第7 章)?
如何使用TensorBoard 检查训练过程(第7 章)?
如果无法将所有数据放入运行时环境的内存,如何使用多个加速器(如GPU)完成分布式训练(第8 章)?
推理过程中如何将数据传递到模型,另外如何处理输出(第9 章)?
你的模型公平吗(第10 章)?
如果你正纠结于这些问题,这本书会对你很有帮助。
排版约定
本书采用以下排版约定。
斜体
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant Width)
表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。
粗体等宽字体(Constant width bold)
表示应由用户原封不动输入的命令或其他文本。
斜体等宽字体(Constant width italic)
表示应该替换成用户提供值的文本,或者由上下文决定的值。
提示
表示提示或建议。
使用代码示例
这本书的补充材料( 代码示例, 练习等) 可以从https://github.com/shinchan75034/tensorflowpocket-ref 下载。
如果你有技术问题,或者使用代码示例时遇到问题,请发送电子邮件至errata@oreilly.com.cn。
本书的目的是要帮助你完成工作。一般来讲,如果书中提供了示例代码,你可以在你的程序和文档中使用这些示例代码,除非你直接复制了大部分的代码,否则不需要联系我们来得到许可。例如,如果你在编写一个程序,使用了本书中的多段代码,这并不需要得到许可。但是出售或发行OReilly 书的示例代码则需要得到许可。回答问题时如果引用了这本书的文字和示例代码,这不需要得到许可。但是如果你的产品文档借用了本书中的大量示例代码,则需要得到许可。
我们希望但不严格要求标明引用出处。引用信息通常包括书名、作者、出版商和ISBN。例如,TensorFlow 2 Pocket Reference by KC Jung(OReilly).Copyright 2021 Favola Vera, LLC, 978-1-492-08918-6。
如果你认为使用代码示例时超出了合理使用范围或者上述许可范围,可以随时联系我们:permissions@oreilly.com。
OReilly 在线学习平台(OReilly Online Learning)
近40 年来,OReilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
公司独有的专家和改革创新者网络通过OReilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。OReilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自OReilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
针对这本书,我们还建有一个网页,列出了有关勘误、示例和其他信息。可以通过以下地址访问这个页面:https://oreil.ly/tensorflow2pr。
如果对这本书有什么意见,或者询问技术上的问题,请发送电子邮件至errata@oreilly.com.cn。
要了解关于我们的图书和课程的新闻和信息,请访问我们的网站:http://www.oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
非常感谢OReilly 编辑们周密而专业的工作。此外,我还要感谢技术审校Tony Holdroyd、Pablo Marin、Giorgio Saez 和Axel Sirota 提供的宝贵反馈和建议。最后,还要特别感谢Rebecca Novack 和Sarah Grey 给我这个机会,与我合作编写了这本书。
KC Tung 是微软的云解决方案架构师,擅长在企业云架构中设计和交付机器学习和AI 解决方案。他帮助企业客户使用用例驱动的架构,在云中完成 AI/ML 模型开发和部署,以及选择最适合其需求的技术和集成方案。他是微软认证的人工智能工程师和数据工程师,拥有得克萨斯大学西南医学院的分子生物物理学博士学位。
目录
前言 . 1
第1 章 TensorFlow 2 简介 . 7
1.1 TensorFlow 2 的改进 8
1.1.1 Keras API .8
1.1.2 TensorFlow 中的可重用模型 9
1.2 简化常用操作 10
1.2.1 开源数据 10
1.2.2 使用分布式数据集 10
1.2.3 数据流式处理 11
1.2.4 数据工程 11
1.2.5 迁移学习 12
1.2.6 模型风格 12
1.2.7 监视训练过程 12
1.2.8 分布式训练 13
1.2.9 提供TensorFlow 模型服务 13
1.2.10 改善训练体验 13
1.3 总结 14
第2 章 数据存储和摄取 15
2.1 使用Python 生成器流式处理数据 16
2.2 使用生成器流式处理文件内容 .18
2.3 JSON 数据结构 .21
2.4 建立文件名模式 22
2.5 将一个CSV 文件划分为多个CSV 文件23
2.6 使用tf.io 创建文件模式对象 .24
2.7 创建流式数据集对象 .25
2.8 流式处理CSV 数据集 28
2.9 组织图像数据 29
2.10 使用TensorFlow 图像生成器31
2.11 流式处理交叉验证图像33
2.12 查看调整大小后的图像 .34
2.13 总结 .36
第3 章 数据预处理 . 39
3.1 准备表格数据进行训练 39
3.1.1 标记列 .41
3.1.2 将列交互编码为可能的特征 46
3.1.3 创建交叉验证数据集48
3.1.4 开始模型训练过程 49
3.1.5 小结 50
3.2 准备图像数据进行处理 51
3.2.1 将图像转换为固定大小 55
3.2.2 训练模型 58
3.2.3 小结 60
3.3 准备文本数据进行处理 60
3.3.1 文本分词 61
3.3.2 创建字典和反转字典65
3.4 总结 67
第4 章 可重用模型元素 69
4.1 基本TensorFlow Hub 工作流 70
4.2 利用迁移学习完成图像分类 74
4.2.1 模型需求 74
4.2.2 数据转换和输入处理75
4.2.3 利用TensorFlow Hub 实现模型 .77
4.2.4 定义输出 78
4.2.5 输出映射到纯文本格式 79
4.2.6 评估:创建一个混淆矩阵 .81
4.2.7 小结 83
4.3 使用tf.keras.applications 模块获得预训练模型 83
4.3.1 利用tf.keras.applications 实现模型 83
4.3.2 微调tf.keras.applications 的模型 85
4.4 总结 86
第5 章 流式摄取数据管道 89
5.1 使用text_dataset_from_directory 函数流式处理文本文件 .90
5.1.1 下载文本数据并建立字典 .90
5.1.2 创建数据管道 92
5.1.3 检查数据集 93
5.1.4 小结 94
5.2 使用flow_from_dataframe 方法利用文件列表流式处理图像 94
5.2.1 下载图像并创建目录95
5.2.2 创建数据摄取管道 96
5.2.3 检查数据集 99
5.2.4 构建和训练tf.keras 模型 .100
5.3 使用from_tensor_slices 方法流式处理NumPy 数组 101
5.3.1 加载示例数据和库 .102
5.3.2 检查NumPy 数组 103
5.3.3 为NumPy 数据建立输入管道 104
5.4 总结 .106
第6 章 模型创建风格 107
6.1 使用符号式API .108
6.1.1 加载CIFAR-10 图像 .108
6.1.2 检查标签分布 110
6.1.3 检查图像 . 111
6.1.4 构建数据管道 113
6.1.5 批处理数据集进行训练 114
6.1.6 构建模型 . 115
6.2 理解继承 118
6.3 使用命令式API .121
6.4 选择API 124
6.5 使用内置训练循环 125
6.6 创建和使用自定义训练循环 126
6.6.1 创建循环的元素 126
6.6.2 在自定义训练循环中集成所有元素 128
6.7 总结 .130
第7 章 监视训练过程 133
7.1 回调对象 134
7.1.1 ModelCheckpoint 134
7.1.2 EarlyStopping 142
7.1.3 小结 144
7.2 TensorBoard .144
7.2.1 由本地Jupyter Notebook 调用TensorBoard 150
7.2.2 由本地命令终端调用TensorBoard .151
7.2.3 由Colab Notebook 调用TensorBoard 151
7.2.4 使用TensorBoard 可视化显示模型过拟合 .152
7.2.5 使用TensorBoard 可视化学习过程 153
7.3 总结 .155
第8 章 分布式训练 157
8.1 数据并行化 158
8.1.1 异步参数服务器 159
8.1.2 同步全归约 160
8.2 使用类tf.distribute.MirroredStrategy 161
8.2.1 创建分布式训练 163
8.2.2 利用tf.distribute.MirroredStrategy 使用GPU 集群 167
8.2.3 小结 173
8.3 Horovod API 173
8.3.1 实现Horovod API 的代码模式 .174
8.3.2 封装模型架构 175
8.3.3 封装数据分离和分片过程 176
8.3.4 工作节点间的参数同步 177
8.3.5 模型检查点回调 178
8.3.6 聚合梯度的分布式优化器 178
8.3.7 使用Horovod API 的分布式训练 179
8.4 总结 .186
第9 章 提供TensorFlow 模型服务. 187
9.1 模型序列化 187
9.1.1 将模型保存为h5 格式 195
9.1.2 将模型保存为pb 格式 196
9.1.3 选择模型格式 198
9.2 TensorFlow Serving .199
9.3 总结 .206
第10 章 改善建模体验:公平性评估和超参数调优 . 207
10.1 模型公平性 208
10.1.1 模型训练和评估 210
10.1.2 公平性评估212
10.1.3 显示Fairness Indicators.214
10.2 超参数调优 221
10.2.1 整数列表作为超参数 222
10.2.2 项选择作为超参数 223
10.2.3 浮点值作为超参数 223
10.3 端到端超参数调优 .223
10.4 总结 231