PREFACE
前 言
欢迎
自2015年11月TensorFlow第一个开源版本发布以来,它便迅速跻身于最激动人心的机器学习库的行列,并在科研、产品和教育等领域正在得到日益广泛的应用。这个库也在不断地得到改进、充实和优化。与此同时,TensorFlow社区正以惊人的速度发展壮大。无论你是新手还是有经验的用户,笔者都希望通过本书帮助你提升使用TensorFlow的能力,使你自如地充分利用这个功能强大的开源库。
本书的内容编排
第一部分:开启TensorFlow之旅
本书第一部分将帮助读者做好使用TensorFlow的准备。第1章为引言,对TensorFlow的历史脉络进行了简要的梳理,并对TensorFlow的设计模式以及选择TensorFlow作为深度学习库的优势和面临的挑战进行了讨论。
引言之后的第2章将介绍安装TensorFlow时应当考虑的因素,并给出了详细的TensorFlow安装指南,即如何从二进制安装包安装和从源码构建TensorFlow。
第二部分:TensorFlow与机器学习基础
从第3章开始,进入本书第二部分。在TensorFlow安装完毕后,第3章将深入介绍TensorFlow API的基础知识,而不会涉及过多的机器学习概念。这样做是为了将“学习TensorFlow”和“学习如何利用TensorFlow从事机器学习相关工作”区分开来。第3章将对TensorFlow API中许多重要的部分进行深入剖析。此外,还将演示如何用可视化的数据流图表示模型,并将其转化为TensorFlow代码,以及如何利用TensorBoard验证数据流图是否被正确建模。
介绍完TensorFlow API的核心概念之后,便进入第4章。这一章将利用TensorFlow实现一些简单的机器学习模型,如线性回归、对数几率回归(logistic regression)和聚类模型。
第三部分:用TensorFlow实现更高级的深度模型
第三部分由两章构成,每章都只关注一种更为复杂的深度学习模型。每章首先对模型进行描述,然后介绍如何用可视化的数据流图表示所要创建的模型。这两章还将讨论为什么要以特定方式构建这些模型,并对所涉及的数学难点进行讲解,之后再介绍如何利用TensorFlow有效地构建这些模型。
所要研究的第一个模型是卷积神经网络(CNN),对应于第5章。该章会介绍如何使用图像数据训练TensorFlow模型,并对卷积的数学原理和使用目的展开讨论,同时还将介绍如何将图像裸数据转化为一种与TensorFlow兼容的格式,以及如何对最终的输出进行测试。
第6章将探讨如何使用TensorFlow正确地构建循环神经网络(RNN)模型。通过各种自然语言处理(NLP)任务,读者将了解如何利用长短时记忆网络(LSTM)以及如何将预训练的词向量包含到模型中。
第四部分:其他提示、技术与特性
本书最后一部分将探讨TensorFlow API中最新推出的特性,内容包括如何准备用于部署的模型、一些有用的编程模式,以及其他精选主题。
其他机器学习库
TensorFlow并非唯一可用的开源机器学习库。下面列出一份可用于深度学习的简短开源库清单:
Caffe专注于卷积神经网络和图像处理,使用C++语言编写。
Chainer是另一个灵活的机器学习Python库,支持单机多GPU运算。
CNTK是微软公司发布的首个开源机器学习库,它拥有自己的模型定义语言,支持声明式的分布式模型构建。
Deeplearning4j是一个专门针对神经网络的Java库,它易于与Spark、Hadoop和其他基于Java的分布式软件集成,具有良好的可伸缩性。
Nervana Neon是一个高效的Python机器学习库,支持单机多GPU运算。
Theano是一个极为灵活的Python机器学习库,因其出众的用户友好性以及可以用异常简单的方式定义复杂模型等特点,在科研领域深受欢迎。TensorFlow的API与Theano API最为相似。
Torch是一个专注于GPU实现的机器学习库,它是用Lua语言编写的,并由来自若干家大公司的研究团队提供支持。
限于篇幅,本书不打算对上述这些库的优缺点展开深入讨论,但如果有时间,非常值得深入展开。TensorFlow的作者在进行框架设计时,便是从当中的几个库汲取了灵感。
先修知识
虽然本书主要关注TensorFlow API,但笔者希望读者已经熟悉大量数学和编程概念,包括:
微积分(一元和多元)
矩阵代数(尤其是矩阵乘法)
基本的编程原理
机器学习的基本概念
此外,读者若能够掌握下列知识,则将从本书中获得更大的收获:
拥有Python编程及模块组织的经验
拥有NumPy库的使用经验
拥有matplotlib库的使用经验
掌握机器学习中更高级的概念,尤其是前馈神经网络、卷积神经网络和循环神经网络
在适宜的时候,笔者会通过一些提示信息帮助读者重新熟悉那些为充分理解相关数学和Python概念所必需的概念。
预期的收获
通过阅读本书,读者将掌握以下内容:
TensorFlow的核心API
TensorFlow的工作流:数据流图的定义和数据流图的执行
如何在各种设备上安装TensorFlow
组织代码和项目的最佳实践
如何用TensorFlow创建核心机器学习模型
如何用TensorFlow实现RNN和CNN
如何用TensorFlow Serving部署代码
利用TensorBoard分析模型的基础知识
在学习完本书之后,如果读者想对TensorFlow获得更多了解,可参考下列资源:
TensorFlow官网 其中包含最新的文档、API和入门材料。
TensorFlow Github代码库 在此,可对TensorFlow的开源实现做出贡献,并直接对源代码进行审查。
官方发布的用TensorFlow实现的机器学习模型 可原封不动地使用这些模型,也可稍加调整以适合自己的设计目的。
谷歌研究院的博客(Google Research Blog) 提供了来自谷歌的有关TensorFlow的应用和更新的最新消息。
Kaggle 获取公开数据集并与其他从事数据分析工作的人开展竞赛的绝佳网站。
Data.gov 美国政府的门户网站,从中可找到全美国的公开数据集。
至此,“动员演讲”已经结束,现在让我们开启本书的学习之旅吧!
CONTENTS
目录
译者序
前言
第一部分 开启TensorFlow之旅
第1章 引言
1.5.1 解读来自官网的单句描述
1.5.2 单句描述未体现的内容
第2章 安装TensorFlow
2.5.1 安装依赖库
2.5.2 安装Bazel
2.5.3 安装CUDA软件(仅限NVIDIA GPU)
2.5.4 从源码构建和安装TensorFlow
第二部分 TensorFlow与机器学习基础
第3章 TensorFlow基础
3.1.1 数据流图基础
3.1.2 节点的依赖关系
3.2.1 构建第一个TensorFlow数据流图
3.2.2 张量思维
3.2.3 张量的形状
3.2.4 TensorFlow的Operation
3.2.5 TensorFlow的Graph对象
3.2.6 TensorFlow Session
3.2.7 利用占位节点添加输入
3.2.8 Variable对象
3.4 练习:综合运用各种组件
3.4.1 构建数据流图
3.4.2 运行数据流图
3.5 本章小结
第4章 机器学习基础
4.1 有监督学习简介
4.2 保存训练检查点
4.3 线性回归
4.4 对数几率回归
4.5 softmax分类
4.6 多层神经网络
4.7 梯度下降法与误差反向传播算法
第三部分 用TensorFlow实现更高级的深度模型
第5章 目标识别与分类
5.1 卷积神经网络
5.2 卷积
5.2.1 输入和卷积核
5.2.2 跨度
5.2.3 边界填充
5.2.4 数据格式
5.2.5 深入探讨卷积核
5.3 常见层
5.3.1 卷积层
5.3.2 激活函数
5.3.3 池化层
5.3.4 归一化
5.3.5 高级层
5.4 图像与TensorFlow
5.4.1 加载图像
5.4.2 图像格式
5.4.3 图像操作
5.4.4 颜色
5.5 CNN的实现
5.5.1 Stanford Dogs数据集
5.5.2 将图像转为TFRecord文件
5.5.3 加载图像
5.5.4 模型
5.5.5 训练
5.5.6 用TensorBoard调试滤波器
5.6 本章小结
第6章 循环神经网络与自然语言处理
6.1 循环神经网络简介
6.1.1 时序的世界
6.1.2 近似任意程序
6.1.3 随时间反向传播
6.1.4 序列的编码和解码
6.1.5 实现第一个循环神经网络
6.1.6 梯度消失与梯度爆炸
6.1.7 长短时记忆网络
6.1.8 RNN结构的变种
6.2 词向量嵌入
6.2.1 准备维基百科语料库
6.2.2 模型结构
6.2.3 噪声对比分类器
6.2.4 训练模型
6.3 序列分类
6.3.1 Imdb影评数据集
6.3.2 使用词向量嵌入
6.3.3 序列标注模型
6.3.4 来自最后相关活性值的softmax层
6.3.5 梯度裁剪
6.3.6 训练模型
6.4 序列标注
6.4.1 OCR数据集
6.4.2 时间步之间共享的soft-max层
6.4.3 训练模型
6.4.4 双向RNN
6.5 预测编码
6.5.1 字符级语言建模
6.5.2 ArXiv摘要API
6.5.3 数据预处理
6.5.4 预测编码模型
6.5.5 训练模型
6.5.6 生成相似序列
6.6 本章小结
第四部分 其他提示、技术与特性
第7章 产品环境中模型的部署
7.1 搭建TensorFlow服务开发环境
7.1.1 Docker镜像
7.1.2 Bazel工作区
7.2 导出训练好的模型
7.3 定义服务器接口
7.4 实现推断服务器
7.5 客户端应用
7.6 产品准备
7.7 本章小结
第8章 辅助函数、代码结构和类
8.1 确保目录结构存在
8.2 下载函数
8.3 磁盘缓存修饰器
8.4 属性字典
8.5 惰性属性修饰器
8.6 覆盖数据流图修饰器
第9章 结语:其他资源