猜你喜欢
TensorFlow技术解析与实战

TensorFlow技术解析与实战

书籍作者:李嘉璇 ISBN:9787115456137
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:4861
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

  TensorFlow 是谷歌公司开发的深度学习框架,也是目前深度学习的主流框架之一。本书从深度学习的基础讲起,深入TensorFlow框架原理、模型构建、源代码分析和网络实现等各个方面。全书分为基础篇、实战篇和提高篇三部分。基础篇讲解人工智能的入门知识,深度学习的方法,TensorFlow的基础原理、系统架构、设计理念、编程模型、常用API、批标准化、模型的存储与加载、队列与线程,实现一个自定义操作,并进行TensorFlow源代码解析,介绍卷积神经网络(CNN)和循环神经网络(RNN)的演化发展及其TensorFlow实现、TensorFlow的高级框架等知识;实战篇讲解如何用TensorFlow写一个神经网络程序并介绍TensorFlow实现各种网络(CNN、RNN和自编码网络等)并对MNIST数据集进行训练,讲解TensorFlow在人脸识别、自然语言处理、图像和语音的结合、生成式对抗网络等方面的应用;提高篇讲解TensorFlow的分布式原理、架构、模式、API,还会介绍TensorFlow XLA、TensorFlow Debugger、TensorFlow和Kubernetes结合、TensorFlowOnSpark、TensorFlow移动端应用,以及TensorFlow Serving、TensorFlow Fold和TensorFlow计算加速等其他特性。最后,附录中列出一些可供参考的公开数据集,并结合作者的项目经验介绍项目管理的一些建议。

作者简介

  李嘉璇,创建TensorFlow交流社区,活跃于国内各大技术社区,知乎编程问题回答者。致力于人工智能的研究,对深度学习框架的架构、源码分析及在不同领域的应用有浓厚兴趣。有过上百篇论文阅读和深度学习经验,处理图像、社交文本数据情感分析、数据挖掘经验,参与过基于深度学习的自动驾驶二维感知系统Hackathon竞赛,曾任职百度研发工程师。

编辑推荐

  - 领导“谷歌大脑”的工程师Jeff Dean发来寄语
  - 李航、余凯等人工智能领域专家倾力推荐
  - 基于TensorFlow 1.1,包揽TensorFlow的新特性
  - 技术内容全面,实战案例丰富,视野广阔
  - 人脸识别、语音识别、图像和语音相结合等热点一应俱全
  TensorFlow是深度学习的流行框架之一,极适合新手入门。谷歌公司正致力于建立一个相关软件和机器学习模型的开源生态系统,这是人工智能发展的技术风口。
  本书基于TensorFlow1.1版本,深入TensorFlow基础原理、设计理念、编程模型、源码分析和模型构建、工业界应用、大规模数据训练等。全书分为基础篇、实战篇和提高篇三部分。
  “基础篇”
   人工智能入门,学习深度学习的方法。
   TensorFlow基础原理、设计架构和编程模型。
   常用API、批标准化、模型的存储与加载、队列及线程、实现一个自定义OP。
   TensorBorad可视化的全面解析。
   源码分析。
   神经网络(CNN和RNN)的发展演化以及如何用TensorFlow实现这些网络。
   第三方上层框架Keras和TFLearn的应用。
  “实战篇”
   用TensorFlow实现了神经网络。
   用TensorFlow实现CNN、RNN、LSTM和自动编码器的各种示例。
   TensorFlow在人脸识别、语音识别、智能机器人、语音和图像相结合以及生成式对抗网络(GAN)等领域的实际应用。
  “提高篇”
   TensorFlow的分布式原理、架构和模式。
   移动端开发(Android、iOS和树莓派)。
   TensorFlow的新特性,线性代数编程框架XLA、调试器Debugger、动态图Fold、生产环境Serving。
   TensorFlow和Kubernetes相结合。
   TensorFlowOnSpark。
   硬件计算加速。
   机器学习的评测体系。
  本书深入浅出,理论联系实际,实战案例新颖,适合对TensorFlow感兴趣的各层次读者阅读。

前言

  缘起
  2017年2月,TensorFlow的首届开发者峰会(2017 TensorFlow Dev Summit)在美国的加利福尼亚州举行。在会上,谷歌公司宣布正式发布TensorFlow 1.0版本。本书就是基于最新的1.1.0版本来介绍TensorFlow的技术解析和实战。
  人工智能大潮来了。2016年,AlphaGo击败围棋大师李世石后,人工智能的应用仿佛一夜之间遍地开花。在科技潮流的大环境中,现在硅谷的用人单位越来越倾向于雇用既懂理论(思考者)又懂编程(执行者)的工程师。思考者的日常工作是阅读文献以求产生思路,而执行者则是编写代码来实现应用。但是要成为一名真正的工程师,学习机器学习是将思考者和执行者相结合的最快途径。
  众所周知,人工智能是高级计算智能最宽泛的概念,机器学习是研究人工智能的一个工具,深度学习是机器学习的一个子集,是目前研究领域卓有成效的学习方法。深度学习的框架有很多,而TenforFlow将神经网络、算法这些平时停留在理论层面的知识,组织成一个平台框架,集合了神经网络的各个算法函数组成一个工具箱,让广大工程师可以专心建造自己的目标领域的“轮子”,而且TenforFlow是基于Python语言的,极易上手,这些优势迅速吸引了全世界的工程师。
  我曾经也是一名前后端开发工程师,更专注于后端工程方向,而潜心研究深度学习和TensorFlow后,我被TensorFlow深深地迷住了。我发现它对各行各业将会有很深远的影响,并且会大大地解放劳动力。
  与传统工程师的主要工作—实现产品需求或者设计高可用性架构不同,深度学习让人总结和抽象人类是怎样理解和看待问题的,并把这种方式教给机器。例如,在AlphaGo的研究中,人们需要先抽象出人类思考围棋的方式,然后将这种方式抽象成算法,并且配合人类大脑构造中神经网络的传输来实现这些算法。这时,工程师不会再写实现业务需求的逻辑代码,而是深度学习中将神经网络的“黑盒”和模型效果非常好却缺乏“可解释性”的特性相结合,在次次实验中尽量找出规律。记得美国前总统肯尼迪在宣布登月计划时曾说:“我们选择去月球,不是因为它简单,而是因为它困难。”今天,我相信,所有致力于人工智能方向的工程师之所以自豪地去研究,也不是因为它简单,而是因为它困难。我们研究它,是因为立足于现在这个点往前看,我们看不到已经建好的高楼大厦,看到的是一片等待我们去发掘的空旷的大地,而这个发掘过程需要的是十足的远见、决心、勇气和信心。
  我在学习的过程中,由于深度学习的资料英文的居多,在理解上走了不少弯路。我把学到的知识和原理用心整理并用文字表述出来,写成这本书,希望能帮助没有接触过深度学习的广大程序员迅速上手,而不再被英文阅读理解挡在门外。说实话,TensorFlow的文档以及API接口是比较抽象的,再加上有一些从工程方向转入深度学习的人以前没有过深度学习的经验,所以如果带着工程类程序研发的思维去学习,甚至是实现业务逻辑需求的思维去学习,效果会很差。我希望这本书能为读者呈现一个通俗易懂、形象生动的TensorFlow,使读者迅速走入深度学习的世界。
  在本书的写作过程中,为了能充分挤出时间,深夜当我困倦时,我常常让自己以最不舒服的方式入睡,希望能尽量少睡,以此增加仔细钻研的时间。有时我还会打开电视,将音量设置为静音,感受房间中电视背景光闪烁的动感,以此提醒自己时间的流动。刚开始我会坐在工作台前写作,累了又会抱着笔记本坐在床上继续写作,有时会写着写着不知不觉地睡着,凌晨三四点钟又醒来,感受黑夜里的那片安宁,心情顿时平静,再次投入到钻研中。每每有灵感,都非常激动;每每再次深入一个概念,增删易稿,把原理逼近真相地讲透,都让我非常有成就感。
  面向的读者
  我素来不爱探究数学公式的推导原理,对符号也很茫然,只是在必须要用时才对这些公式进行详细的推导,但是我却对这些原理在应用层面如何使用出奇地感兴趣。本书的目标就是带读者进入造“应用轮子”的大门。我会以最少的数学公式讲清楚如何用TensorFlow实现CNN、RNN,如何在实战中使用TensorFlow进行图片分类、人脸识别和自然语言处理等,以及如何将想训练的数据、想实现的应用亲手做出来。
  同时,Python语言是一门相当高级的语言,有“可执行的伪代码”的美誉,可以用极少的代码行去完成一个复杂的功能,同时Python还有极为丰富的第三方库,让全世界很多工程师的开发工作变得异常简单。TensorFlow是用Python语言实现的框架,对很多学生来说非常容易上手,当然,如果是有开发经验的工程师,就更容易学会。如果说设计神经网络模型像是盖一栋大楼,那么TensorFlow强大的API用起来会让人感觉就像搭积木一样容易。因此,懂点儿Python,即便不怎么懂数学和算法原理也没关系,尽管跟着我一起学便是。
  在翻译学上有一个概念叫作“平行语料库”,这个概念来自制作于公元前196年的古埃及罗塞塔石碑,石碑上用希腊文字、古埃及文字和当时的通俗体文字刻了同样的内容。在本书进行某个概念的讲解时,虽然是用Python代码作示范,但TensorFlow前端开发同时也支持多种上层语言,本书讲解过程中也会兼顾到用C++、Java、Go语言做开发的读者。
  我希望,本书成为不同领域的读者进入人工智能领域的“垫脚石”,也希望所有的读者在人生路上能利用TensorFlow这个工具大放异彩。
  我有很重的强迫症,因此,在编写本书的过程中,阅读了国内外很多与TensorFlow相关的资料,对本书的目录结构和框架经过很多次反复琢磨和调整;在写完之后,我又从头到尾地读过好几遍,并且和了解TensorFlow不同方面的人反复交流,根据建议又反复修改。这一切就是希望它能通俗易懂,把读者快速领入深度学习的大门。
  这扇门的背后是异彩纷呈的,身怀这门技艺的人是应该非常自豪的,但这扇门的背后也是非常辛苦的,有时数据需要自己去想办法解决,还需要每天看论文,知晓最新科研成果,给自己以启发,反复地做实验,研究算法和模型,寻求提升和解决方法,经常会遇到在很长一段时间没有思路的情况。但是,只要做的东西是开创的,令人称赞的,就会开心地享受这个过程。
  我专为本书读者建立了一个QQ交流群(320420130),希望在群里与大家深入讨论和交流学习过程中遇到的问题,也希望与大家分享最新的研究成果。
  致谢
  非常感谢谷歌大脑的工程师Jeff Dean,在得知我目前正在写这本书的时候,他特地发了邮件鼓励我:“听说你写了一本关于TensorFlow的书,真是太好了。希望你很享受学习TensorFlow的这段经历,并享受运用TensorFlow完成各种任务的这种体验。我非常高兴你为中文社区写这本书。” 这让我更坚定了传播TensorFlow深度学习的决心。
  感谢百度硅谷AI实验室资深科学家王益老师关于AI on Kubernetes的建议。
  感谢在百度工作时的同事陈后江,在写作过程中,我们有时在周末的深夜还进行讨论,印象最深的一次是在大冬天晚上,我们恰好都在外面,相互通了20多分钟电话,手冻得像冰棒似的。还要感谢童牧晨玄,他也是深度学习领域的爱好者,对关键的概念理解得非常透彻,能十分精准地讲出原理。
  非常感谢《Redis实战》一书的译者黄健宏,他对技术写作有很丰富的经验。和他聊书总是能聊到凌晨以后,讨论到畅快处,甚至聊到天亮,他对问题的思考就像是“演杂技”一样,精准又恰到好处;同时,他又是一个非常让人感到温暖和踏实的朋友。
  非常感谢iOS资深开发者唐巧,他在国内社区乐于分享的精神造福了很多的技术从业者,也正是他的推荐让我和本书的编辑杨海玲老师结下了这段美好的情谊。
  非常感谢人民邮电出版社的杨海玲编辑,她最开始想到这个写作方向,我们一起一点一点地讨论书的内容,确认书的写作框架。在写作过程中,她的细致、专业、独到的见解也为本书增色不少。她对内容严谨和认真的态度令人动容。
  非常感谢中科院计算所刘昕博士对本书第6章神经网络的发展提出的建议;感谢曾经的百度同事毕骁鹏对第8章、第9章、第13章、第14章、第20章、第21章提出的极为细致的建议,尤其是他擅长GPU和FPGA的部分,对本书的硬件加速提供了很多建议;感谢中科院智能信息处理重点实验室常务副主任山世光对第10章人脸识别部分提出的建议;感谢刘元震对本书第11章提出的建议;感谢我的好朋友容器专家苗立尧对第17章提出的建议;感谢百度地图导航专家梁腾腾对第19章移动端开发给予的极为细致的建议;感谢阿里巴巴数据科学与技术研究院高级专家孙亮博士对整本书的结构和知识点提出的建议。
  感谢我的好朋友吴丽明,曾经那么帮助过我;感谢我的好朋友饶志臻先生,一直诱惑我买苹果设备,有个硬件发烧友真的很幸福;感谢我的闺蜜谢禹曦,好久没有和你聚餐了,甚是思念。
  最后,还得感谢一位流行歌手—“火星弟弟”华晨宇,他在舞台上那一次次创意和感染力的演出深深地吸引了我,他在台下那认真刻苦作曲改歌的样子也激励着我,每次想到他的事迹,都给我极大的鼓励。
  非常感谢本书的每一位读者,本书的完成过程非常辛苦但也充满甜蜜。我在“知乎”和网站上也会回答关于“人工智能”的各类问题,希望通过内容的更新与读者不断交流。另外,由于水平有限,在内容上表述上难免也有遗漏和疏忽,也恳请读者多多指正。
  李嘉璇
  2017年4月于北京石景山

目录

第一篇 基础篇

第1章 人工智能概述 2

1.1 什么是人工智能 2

1.2 什么是深度学习 5

1.3 深度学习的入门方法 7

1.4 什么是TensorFlow 11

1.5 为什么要学TensorFlow 12

1.5.1 TensorFlow的特性 14

1.5.2 使用TensorFlow的公司 15

1.5.3 TensorFlow的发展 16

1.6 机器学习的相关赛事 16

1.6.1 ImageNet的ILSVRC 17

1.6.2 Kaggle 18

1.6.3 天池大数据竞赛 19

1.7 国内的人工智能公司 20

1.8 小结 22

第2章 TensorFlow环境的准备 23

2.1 下载TensorFlow 1.1.0 23

2.2 基于pip的安装 23

2.2.1 Mac OS环境准备 24

2.2.2 Ubuntu/Linux环境准备 25

2.2.3 Windows环境准备 25

2.3 基于Java的安装 28

2.4 从源代码安装 29

2.5 依赖的其他模块 30

2.5.1 numpy 30

2.5.2 matplotlib 31

2.5.3 jupyter 31

2.5.4 scikit-image 32

2.5.5 librosa 32

2.5.6 nltk 32

2.5.7 keras 33

2.5.8 tflearn 33

2.6 小结 33

第3章 可视化TensorFlow 34

3.1 PlayGround 34

3.1.1 数据 35

3.1.2 特征 36

3.1.3 隐藏层 36

3.1.4 输出 37

3.2 TensorBoard 39

3.2.1 SCALARS面板 40

3.2.2 IMAGES面板 41

3.2.3 AUDIO面板 42

3.2.4 GRAPHS面板 42

3.2.5 DISTRIBUTIONS面板 43

3.2.6 HISTOGRAMS面板 43

3.2.7 EMBEDDINGS面板 44

3.3 可视化的例子 44

3.3.1 降维分析 44

3.3.2 嵌入投影仪 48

3.4 小结 51

第4章 TensorFlow基础知识 52

4.1 系统架构 52

4.2 设计理念 53

4.3 编程模型 54

4.3.1 边 56

4.3.2 节点 57

4.3.3 其他概念 57

4.4 常用API 60

4.4.1 图、操作和张量 60

4.4.2 可视化 61

4.5 变量作用域 62

4.5.1 variable_scope示例 62

4.5.2 name_scope示例 64

4.6 批标准化 64

4.6.1 方法 65

4.6.2 优点 65

4.6.3 示例 65

4.7 神经元函数及优化方法 66

4.7.1 激活函数 66

4.7.2 卷积函数 69

4.7.3 池化函数 72

4.7.4 分类函数 73

4.7.5 优化方法 74

4.8 模型的存储与加载 79

4.8.1 模型的存储与加载 79

4.8.2 图的存储与加载 82

4.9 队列和线程 82

4.9.1 队列 82

4.9.2 队列管理器 85

4.9.3 线程和协调器 86

4.10 加载数据 87

4.10.1 预加载数据 87

4.10.2 填充数据 87

4.10.3 从文件读取数据 88

4.11 实现一个自定义操作 92

4.11.1 步骤 92

4.11.2 最佳实践 93

4.12 小结 101

第5章 TensorFlow源代码解析 102

5.1 TensorFlow的目录结构 102

5.1.1 contirb 103

5.1.2 core 104

5.1.3 examples 105

5.1.4 g3doc 105

5.1.5 python 105

5.1.6 tensorboard 105

5.2 TensorFlow源代码的学习方法 106

5.3 小结 108

第6章 神经网络的发展及其TensorFlow实现 109

6.1 卷积神经网络 109

6.2 卷积神经网络发展 110

6.2.1 网络加深 111

6.2.2 增强卷积层的功能 115

6.2.3 从分类任务到检测任务 120

6.2.4 增加新的功能模块 121

6.3 MNIST的AlexNet实现 121

6.3.1 加载数据 121

6.3.2 构建网络模型 122

6.3.3 训练模型和评估模型 124

6.4 循环神经网络 125

6.5 循环神经网络发展 126

6.5.1 增强隐藏层的功能 127

6.5.2 双向化及加深网络 129

6.6 TensorFlow Model Zoo 131

6.7 其他研究进展 131

6.7.1 强化学习 132

6.7.2 深度森林 132

6.7.3 深度学习与艺术 132

6.8 小结 133

第7章 TensorFlow的高级框架 134

7.1 TFLearn 134

7.1.1 加载数据 134

7.1.2 构建网络模型 135

7.1.3 训练模型 135

7.2 Keras 135

7.2.1 Keras的优点 136

7.2.2 Keras的模型 136

7.2.3 Keras的使用 137

7.3 小结 141

第二篇 实战篇

第8章 第一个TensorFlow程序 144

8.1 TensorFlow的运行方式 144

8.1.1 生成及加载数据 144

8.1.2 构建网络模型 145

8.1.3 训练模型 145

8.2 超参数的设定 146

8.3 小结 147

第9章 TensorFlow在MNIST中的应用 148

9.1 MNIST数据集简介 148

9.1.1 训练集的标记文件 148

9.1.2 训练集的图片文件 149

9.1.3 测试集的标记文件 149

9.1.4 测试集的图片文件 150

9.2 MNIST的分类问题 150

9.2.1 加载数据 150

9.2.2 构建回归模型 151

9.2.3 训练模型 151

9.2.4 评估模型 152

9.3 训练过程的可视化 152

9.4 MNIST的卷积神经网络 156

9.4.1 加载数据 157

9.4.2 构建模型 157

9.4.3 训练模型和评估模型 159

9.5 MNIST的循环神经网络 161

9.5.1 加载数据 161

9.5.2 构建模型 161

9.5.3 训练数据及评估模型 163

9.6 MNIST的无监督学习 164

9.6.1 自编码网络 164

9.6.2 TensorFlow的自编码网络实现 165

9.7 小结 169

第10章 人脸识别 170

10.1 人脸识别简介 170

10.2 人脸识别的技术流程 171

10.2.1 人脸图像采集及检测 171

10.2.2 人脸图像预处理 171

10.2.3 人脸图像特征提取 171

10.2.4 人脸图像匹配与识别 172

10.3 人脸识别的分类 172

10.3.1 人脸检测 172

10.3.2 人脸关键点检测 173

10.3.3 人脸验证 174

10.3.4 人脸属性检测 174

10.4 人脸检测 175

10.4.1 LFW数据集 175

10.4.2 数据预处理 175

10.4.3 进行检测 176

10.5 性别和年龄识别 178

10.5.1 数据预处理 179

10.5.2 构建模型 181

10.5.3 训练模型 182

10.5.4 验证模型 184

10.6 小结 185

第11章 自然语言处理 186

11.1 模型的选择 186

11.2 英文数字语音识别 187

11.2.1 定义输入数据并预处理数据 188

11.2.2 定义网络模型 188

11.2.3 训练模型 188

11.2.4 预测模型 189

11.3 智能聊天机器人 189

11.3.1 原理 190

11.3.2 最佳实践 191

11.4 小结 200

第12章 图像与语音的结合 201

12.1 看图说话模型 201

12.1.1 原理 202

12.1.2 最佳实践 203

12.2 小结 205

第13章 生成式对抗网络 206

13.1 生成式对抗网络的原理 206

13.2 生成式对抗网络的应用 207

13.3 生成式对抗网络的实现 208

13.4 生成式对抗网络的改进 214

13.5 小结 214

第三篇 提高篇

第14章 分布式TensorFlow 216

14.1 分布式原理 216

14.1.1 单机多卡和分布式 216

14.1.2 分布式部署方式 217

14.2 分布式架构 218

14.2.1 客户端、主节点和工作节点的关系 218

14.2.2 客户端、主节点和工作节点的交互过程 220

14.3 分布式模式 221

14.3.1 数据并行 221

14.3.2 同步更新和异步更新 222

14.3.3 模型并行 224

14.4 分布式API 225

14.5 分布式训练代码框架 226

14.6 分布式最佳实践 227

14.7 小结 235

第15章 TensorFlow线性代数编译框架XLA 236

15.1 XLA的优势 236

15.2 XLA的工作原理 237

15.3 JIT编译方式 238

15.3.1 打开JIT编译 238

15.3.2 将操作符放在XLA设备上 238

15.4 JIT编译在MNIST上的实现 239

15.5 小结 240

第16章 TensorFlow Debugger 241

16.1 Debugger的使用示例 241

16.2 远程调试方法 245

16.3 小结 245

第17章 TensorFlow和Kubernetes结合 246

17.1 为什么需要Kubernetes 246

17.2 分布式TensorFlow在Kubernetes中的运行 247

17.2.1 部署及运行 247

17.2.2 其他应用 253

17.3 小结 254

第18章 TensorFlowOnSpark 255

18.1 TensorFlowOnSpark的架构 255

18.2 TensorFlowOnSpark在MNIST上的实践 257

18.3 小结 261

第19章 TensorFlow移动端应用 262

19.1 移动端应用原理 262

19.1.1 量化 263

19.1.2 优化矩阵乘法运算 266

19.2 iOS系统实践 266

19.2.1 环境准备 266

19.2.2 编译演示程序并运行 267

19.2.3 自定义模型的编译及运行 269

19.3 Android系统实践 273

19.3.1 环境准备 274

19.3.2 编译演示程序并运行 275

19.3.3 自定义模型的编译及运行 277

19.4 树莓派实践 278

19.5 小结 278

第20章 TensorFlow的其他特性 279

20.1 TensorFlow Serving 279

20.2 TensorFlow Flod 280

20.3 TensorFlow计算加速 281

20.3.1 CPU加速 281

20.3.2 TPU加速和FPGA加速 282

20.4 小结 283

第21章 机器学习的评测体系 284

21.1 人脸识别的性能指标 284

21.2 聊天机器人的性能指标 284

21.3 机器翻译的评价方法 286

21.3.1 BLEU 286

21.3.2 METEOR 287

21.4 常用的通用评价指标 287

21.4.1 ROC和AUC 288

21.4.2 AP和mAP 288

21.5 小结 288

附录A 公开数据集 289

附录B 项目管理经验小谈 292

产品特色