Antonio Gulli
企业领导和软件部门高管,具备创新精神和执行力,并乐于发现和管理全球高科技人才。他是搜索引擎、在线服务、机器学习、信息检索、数据分析以及云计算等方面的专家。目前,他在谷歌华沙担任网站主管和云计算主管,推动Serverless、Kubernetes和Google Cloud UX等项目在欧洲的发展。
Amita Kapoor
本书介绍如何有效地使用Google的开源框架TensorFlow进行深度学习。你将实现不同的深度学习网络,如卷积神经网络(CNN)、循环神经网络(RNN)、深度Q learning网络(DQN)和生成对抗网络(GAN),并将学习如何使用TensorFlow的高级封装工具Keras。
你将了解如何使用不同的深层神经架构来执行复杂的任务,并在一些常用数据集(如MNIST、CIFAR-10、Youtube8m等)上了解不同DNN的性能,不仅可以了解TensorFlow支持的不同移动和嵌入式平台,还可以了解如何为深度学习应用程序搭建云平台。你将深入了解TPU架构,以及它们将如何影响DNN的未来。
学完本书,你将理解深度学习实践技术,能够独立开发现实世界中的一些应用,开展如强化学习、GAN、自动编码机等领域的研究。
阅读本书前的准备工作
为更好地学习本书,你需要安装Python 3.5版本(https://www.continuum.io/ downloads)以及TensorFlow(www.tensorflow.org)。建议使用以下硬件配置:
CPU架构:x86_64
系统内存:8 GB~32 GB
CPU:4~8 核
GPU:可选,最低NVDIA GTX 650
读者对象
本书主要面向想要定期执行机器学习任务的数据科学家、机器学习从业者和深度学习爱好者。对深度神经网络已有了解并希望获得CNN和RNN等方面实践经验的人会发现本书很有用。
本书结构
在这本书中,你会发现几个频繁出现的小标题(准备工作、具体做法、解读分析、更多内容、拓展阅读),具体含义如下。
准备工作
这部分主要介绍需要做什么,并介绍如何安装所需的软件并进行初步设置。
具体做法
这部分包括实现相应功能的具体步骤。
解读分析
这部分通常包含对具体步骤的详细解释。
更多内容
这部分是扩充知识,以使读者对其有更多的了解。
拓展阅读
这部分将列出一些相关的网址。
下载示例代码
本书的示例代码,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
勘误和支持
由于译者水平有限,特别担心未能完美传达原作者的意思,建议有条件的读者去阅读英文原著。
致谢
Antonio Gulli
感谢每位读者对本书的关注和信任。在LinkedIn和Facebook上收到的评论数量让我感到诚惶诚恐:每一位读者都为本书的改进提供了巨大的帮助。也要感谢以下各位在写作过程中给予的支持:Susana、Ewa、Ignacy、Dawid、Max、Jarek、Jerzy、Nina、Laura、Antonella、Eric、Ettore、Francesco、Liubov、Marco、Fabio、Giacomo、Saskia、Christina、Wieland和 Yossi。非常感谢我的合作者Amita,以及她的宝贵意见和建议。特别感谢本书的审校者Eric Brewer、Corrado Zoccolo和Sujit Pal审校了整本书的内容。特别感谢我的经理Eyal在写作过程中对我的支持与信任。Charlotte Menora (http://bistrocharlotte.pl/)是位于华沙的一家酒吧,工作之余我在那里写作了本书的部分章节。这是一个鼓舞人心的地方,如果你访问波兰,一定不要错过华沙这个现代化的酷炫城市。最后,非常感谢Packt的整个编辑团队,尤其是Tushar Gupta和Tejas Limkar的支持以及不断的督促和提醒。感谢你们的耐心。
Amita Kapoor
我试图在这本书中总结我在深度神经网络领域学到的知识。我以一种让读者容易理解和运用的方式呈现,所以本书的主要动力来自于你——读者。感谢这本书的每一位读者,是你们激励着我不断前行,尤其是在我懒惰的时候。我还要感谢加尔各答大学的Parongama Sen教授在1994年向我介绍了这个主题,还有我的朋友Nirjara Jain和Shubha Swaminathan在大学图书馆里与我讨论阿西莫夫、他的故事以及未来神经网络将改变社会的预见。非常感谢我的合作者Antonio Guili的宝贵意见,以及本书的审校者Narotam Singh和Nick McClure对全书内容精心审阅并重新检查代码。最后,非常感谢Packt的整个编辑团队,尤其是Tushar Gupta和Tejas Limkar的支持以及不断的督促和提醒。
Narotam Singh(审校者)
我想感谢许多帮助我的人,特别是:我的妻子 Ermelinda ,多年来一直支持我致力于计算机科学研究; Marco Vanneschi 教授,向我介绍美丽的分布式系统世界;我在 Google 的第一任经理 Peter Dickman ,他让我走上了正确的职业生涯,我每天都在和同事们一起学习第1章 TensorFlow简介 1
1.1 引言 1
1.2 TensorFlow安装 2
1.3 Hello world 6
1.4 理解TensorFlow程序结构 8
1.5 常量、变量和占位符 10
1.6 使用TensorFlow 执行矩阵操作 15
1.7 使用数据流图 17
1.8 从0.x迁移到1.x 18
1.9 使用XLA提升运算性能 19
1.10 调用CPU/GPU设备 21
1.11 TensorFlow与深度学习 24
1.12 DNN问题需要的Python包 28
第2章 回归 30
2.1 引言 30
2.2 选择损失函数 31
2.3 TensorFlow中的优化器 33
2.4 读取CSV文件和数据预处理 36
2.5 房价估计——简单线性回归 39
2.6 房价估计——多元线性回归 42
2.7 MNIST数据集的逻辑回归 45
第3章 神经网络——感知机 50
3.1 引言 50
3.2 激活函数 52
3.3 单层感知机 58
3.4 计算反向传播算法的梯度 60
3.5 使用MLP实现MNIST分类器 63
3.6 使用MLP逼近函数来预测波士顿房价 66
3.7 调整超参数 71
3.8 高级API——Keras 72
第4章 卷积神经网络 75
4.1 引言 75
4.2 创建一个ConvNet来分类手写MNIST数字 79
4.3 创建一个ConvNet来分类CIFAR-10数据集 84
4.4 用VGG19做风格迁移的图像重绘 87
4.5 使用预训练的VGG16网络进行迁移学习 96
4.6 创建DeepDream网络 100
第5章 高级卷积神经网络 105
5.1 引言 105
5.2 为情感分析创建一个ConvNet 106
5.3 检验VGG预建网络学到的滤波器 109
5.4 使用 VGGNet、ResNet、Inception和Xception分类图像 113
5.5 重新利用预建深度学习模型进行特征提取 125
5.6 用于迁移学习的深层InceptionV3网络 126
5.7 使用扩张ConvNet、WaveNet和 NSynth生成音乐 129
5.8 关于图像的问答 134
5.9 利用预训练网络进行视频分类的6种方法 140
第6章 循环神经网络 144
6.1 引言 144
6.2 神经机器翻译——seq2seq RNN训练 150
6.3 神经机器翻译——seq2seq RNN推理 156
6.4 你所需要的是注意力—另一个seq2seq RNN例子 157
6.5 使用RNN像莎士比亚一样写作 161
6.6 基于RNN学习预测比特币价格 165
6.7 多对一和多对多的RNN例子 174
第7章 无监督学习 176
7.1 引言 176
7.2 主成分分析 176
7.3 k均值聚类 181
7.4 自组织映射 186
7.5 受限玻尔兹曼机 191
7.6 基于RBM的推荐系统 196
7.7 用DBN进行情绪检测 198
第8章 自动编码机 205
8.1 引言 205
8.2 标准自动编码机 207
8.3 稀疏自动编码机 212
8.4 去噪自动编码机 217
8.5 卷积自动编码机 221
8.6 堆叠自动编码机 225
第9章 强化学习 231
9.1 引言 231
9.2 学习OpenAI Gym 232
9.3 用神经网络智能体玩Pac-Man游戏 235
9.4 用Q learning玩Cart-Pole平衡游戏 238
9.5 用DQN玩Atari游戏 244
9.6 用策略梯度网络玩Pong游戏 252
第10章 移动端计算 259
10.1 引言 259
10.2 安装适用于macOS和Android的TensorFlow mobile 260
10.3 玩转TensorFlow和Android的示例 265
10.4 安装适用于macOS和iPhone的TensorFlow mobile 268
10.5 为移动设备优化TensorFlow计算图 271
10.6 为移动设备分析TensorFlow计算图 273
10.7 为移动设备转换TensorFlow计算图 275
第11章 生成式模型和CapsNet 278
11.1 引言 278
11.2 学习使用简单GAN虚构MNIST图像 284
11.3 学习使用DCGAN虚构MNIST图像 289
11.4 学习使用DCGAN虚构名人面孔和其他数据集 294
11.5 实现变分自动编码机 297
11.6 学习使用胶囊网络击败MNIST前期的最新成果 305
第12章 分布式TensorFlow和云深度学习 319
12.1 引言 319
12.2 在GPU上使用TensorFlow 322
12.3 玩转分布式TensorFlow:多个GPU和一个CPU 323
12.4 玩转分布式TensorFlow:多服务器 324
12.5 训练分布式TensorFlow MNIST分类器 326
12.6 基于Docker使用TensorFlow Serving 328
12.7 使用计算引擎在谷歌云平台上运行分布式TensorFlow 330
12.8 在谷歌CloudML上运行分布式TensorFlow 333
12.9 在Microsoft Azure上运行分布式TensorFlow 334
12.10 在Amazon AWS上运行分布式TensorFlow 337
附录A 利用AutoML学会学习(元学习) 342
附录B TensorFlow处理器 350