前言

前言

缘起

2016年的某个中午,我在知乎上回答了名为“如何高效学习TensorFlow代码?”的问题,其中简单介绍了我在TensorFlow开源社区的贡献,以及TensorFlow的学习路线和方法。此回答引起了一些圈内人的共鸣。人民邮电出版社图灵公司的编辑也在第一时间找到我,希望我能够写一本TensorFlow相关的图书。于是,便有了你手中的这本书。

为什么写本书

在ImageNet的带动下,深度学习的研究热潮已席卷全球。随着AlphaGo的横空出世,资本市场对人工智能的产业化也表现出了空前的兴趣。2017年7月,《国务院关于印发新一代人工智能发展规划的通知》的出台,标志着国家层面对人工智能发展的高度重视,明确了我国新一代人工智能发展的战略目标。未来10年,我们将见证人工智能全面升级改造传统行业。在这场深刻变革中,TensorFlow将迸发出巨大的能量。

TensorFlow推出短短一个月,就成为了机器学习和深度学习项目中最受欢迎的开源框架。究其原因,离不开Google在人工智能与数据处理领域的深厚积淀及其在业界的强大号召力。TensorFlow自2015年11月开源以来,已经发布了30多个版本。尽管TensorFlow整个生态系统是开源的,但由于它版本升级过快,且算子种类众多,大部分公司,尤其是一些中小型或创业公司,难以在有限的时间内快速掌握TensorFlow的设计思想和基本原理。TensorFlow开源的PS-worker分布式架构也在快速迭代,与其内部基于Borg调度的分布式架构并不相同。自TensorFlow开源以来,不断有人撰写图书或博客解释其各组件的实现与原理。但遗憾的是,能够深入剖析TensorFlow内部实现细节与设计思想的资料少之又少,而本书则尝试弥补这一缺憾。

本书以TensorFlow 1.2为基础,从基本概念、内部实现和最佳实践等方面深入剖析了TensorFlow。书中重点阐述了以数据流图为核心的机器学习编程框架的设计原则与核心实现,并且介绍了TensorFlow生态系统中的两大重要工具:TensorBoard可视化工具与TensorFlow Serving模型托管工具。同时,本书还将TensorFlow与深度学习相结合,从理论基础和程序实现这两个方面系统介绍了卷积神经网络(CNN)、生成对抗网络(GAN)和循环神经网络(RNN)等经典模型。本书不仅由浅入深地全面介绍了TensorFlow的使用方法,而且结合源代码进行了深入剖析,使读者可以快速、系统地学习TensorFlow的架构设计与实现原理。

读者对象

本书的读者主要包含以下人员。

  • TensorFlow二次开发人员。由于在高效性、多平台、多语言、稳定性等方面的诸多优点,TensorFlow已被国内外越来越多的公司采用并部署到生产环境。而为了解决特定场景下的特定问题,大部分公司选择在开源TensorFlow的基础上进行二次开发。通过这本书,这部分人员可以深入而又全面地了解TensorFlow的设计原则和实现细节,这是修改TensorFlow内核的前提。
  • 数据科学家和算法工程师。如果要使用TensorFlow解决生产和生活中的实际问题,仅掌握TensorFlow基本使用方法是远远不够的,还必须对TensorFlow的设计理念、架构和运作机制有一定了解。尤其是对于分布式训练任务,更需要深入了解TensorFlow分布式的架构设计与多种并行模式的实现原理。对于这部分读者来说,本书将带领他们走入TensorFlow架构师的内心世界,使其系统、深入地理解TensorFlow和数据流图,提高开发水平,从而编写出更加高效的深度学习和机器学习模型。
  • 人工智能方向的研究生。对于一名人工智能专业的研究生来说,除了需要具备扎实的人工智能理论功底外,还应当熟练掌握一种算法模型编程框架,才能将研究课题中的问题快速落实到实际的代码上来。而TensorFlow便是当下最受欢迎的机器学习和深度学习框架。通过阅读本书,人工智能方向的研究生可以全面提升复现论文实验结果和开发全新模型的效率,并深入理解TensorFlow的设计思想和实现细节。
  • 开源软件爱好者。TensorFlow是全世界最受欢迎的开源机器学习和深度学习框架,它在设计和实现过程中参考了Google第一代分布式机器学习框架DistBelief的实践经验,同时又加入了很多值得学习的创新。本书分析TensorFlow架构设计和实现原理的方式也许值得许多开源软件爱好者学习和借鉴,这部分读者不仅能够领略到开源软件的优秀设计,还可以掌握分析开源软件源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。

如何阅读本书

本书分为五大部分(不包括附录)。

第一部分为基础篇(第1~3章),简单介绍了TensorFlow设计目标、基本架构、环境准备和基础概念,包括数据流图的设计与使用,以及TensorFlow运行环境和训练机制,帮助读者快速入门TensorFlow,迅速上手使用。

第二部分为关键模块篇(第4~7章),着重讲解了使用TensorFlow端到端解决人工智能问题涉及的关键模块,包括数据处理、编程框架、可视化工具和模型托管工具,帮助读者进一步提升开发效率,快速落地模型应用。

第三部分为算法模型篇(第8~11章),在读者熟练掌握TensorFlow后,该部分将深度学习与TensorFlow有机结合,系统介绍了深度学习的发展历史与应用场景,并结合理论与代码实现深入讲解了CNN、GAN和RNN等经典模型。

第四部分为核心揭秘篇(第12~14章),深入剖析了TensorFlow运行时核心、通信原理和数据流图计算的原理与实现,聚焦C++ 核心层的揭秘,帮助读者进一步理解TensorFlow底层的设计思想与实现细节,TensorFlow二次开发人员需重点关注这部分内容。

第五部分为生态发展篇(第15章),全面介绍了TensorFlow生态系统发展,并重点介绍了Keras深度学习算法库,以及TensorFlow与云原生社区Kubernetes生态的结合、与大数据社区Spark生态的结合,并介绍了TensorFlow通信优化技术、TPU及NNVM模块化深度学习技术,帮助读者进一步全面了解深度学习生态发展的现状。

勘误和支持

感谢您在茫茫书海中选择了我们的作品。尽管我们在写作过程中力求以精确的语言传达正确的信息,然而由于专业水平与表达能力的限制,书中难免仍有不周之处。深度学习相关理论与技术演进飞速,书中部分内容在呈现于读者之时或许已不合时宜。我们诚挚地希望你能够指正本书存在的问题,并给我们提出宝贵的意见和建议。

读者可以通过图灵社区的本书主页(http://www.ituring.com.cn/book/2397)提交或查看勘误。本书的样章与部分示例代码也已托管在GitHub 项目(https://github.com/DjangoPeng/tensorflow-in-depth)中,欢迎读者访问并提出意见与建议。。

致谢

感谢我的合作者林健博士,他在计算机系统方面学识渊博,使我在合作著书的过程中不断进步。同时,林健博士对本书的审稿和校稿工作也做出了重要贡献。

感谢我的另一位合作者白小龙博士,他对深度学习理论和落地的丰富经验使我受益匪浅。

感谢人民邮电出版社图灵公司的王军花编辑在这一年多的时间中始终支持我们的写作,她的鼓励和帮助使我们顺利完成了本书。

感谢丁泽震、辛现银、张震宇、李鹏飞、尉建等朋友在写书和校稿过程中给我们提供的修改建议与各种帮助。

谨以此书献给我们最亲爱的家人,以及众多热爱TensorFlow和深度学习的朋友们!

彭靖田

于杭州

目录