0%

Tensorflow

tensorflow20180801.jpg

Tensor + Flow

深入理解TensorFlow:架构设计与实现原理

tensorflow20180726002.jpg

内容简介

本书以TensorFlow 1.2为基础,从基本概念、内部实现和实践等方面深入剖析了TensorFlow。书中首先介绍了TensorFlow设计目标、基本架构、环境准备和基础概念,接着重点介绍了以数据流图为核心的机器学习编程框架的设计原则与核心实现,紧接着还将TensorFlow与深度学习相结合,从理论基础和程序实现这两个方面系统介绍了CNN、GAN和RNN等经典模型,然后深入剖析了TensorFlow运行时核心、通信原理和数据流图计算的原理与实现,全面介绍了TensorFlow生态系统的发展。

目录

第一部分 基础篇
第 1章 TensorFlow系统概述 2
1.1 简介 2
1.1.1 产生背景 2
1.1.2 独特价值 3
1.1.3 版本变迁 4
1.1.4 与其他主流深度学习框架的对比 6
1.2 设计目标 7
1.2.1 灵活通用的深度学习库 8
1.2.2 端云结合的人工智能引擎 9
1.2.3 高性能的基础平台软件 10
1.3 基本架构 12
1.3.1 工作形态 12
1.3.2 组件结构 13
1.4 小结 14
第 2章 TensorFlow环境准备 15
2.1 安装 15
2.1.1 TensorFlow安装概述 15
2.1.2 使用Anaconda安装 17
2.1.3 使用原生pip安装 17
2.1.4 使用virtualenv安装 18
2.1.5 使用Docker安装 19
2.1.6 使用源代码编译安装 20
2.1.7 Hello TensorFlow 22
2.2 依赖项 23
2.2.1 Bazel软件构建工具 24
2.2.2 Protocol Buffers数据结构序列化工具 25
2.2.3 Eigen线性代数计算库 27
2.2.4 CUDA统一计算设备架构 28
2.3 源代码结构 29
2.3.1 根目录 29
2.3.2 tensorflow目录 30
2.3.3 tensorflow/core目录 31
2.3.4 tensorflow/python目录 32
2.3.5 安装目录 33
2.4 小结 33
第3章 TensorFlow基础概念 34
3.1 编程范式:数据流图 34
3.1.1 声明式编程与命令式编程 34
3.1.2 声明式编程在深度学习应用上的优势 35
3.1.3 TensorFlow数据流图的基本概念 38
3.2 数据载体:张量 40
3.2.1 张量:Tensor 40
3.2.2 稀疏张量:SparseTensor 44
3.3 模型载体:操作 46
3.3.1 计算节点:Operation 46
3.3.2 存储节点:Variable 49
3.3.3 数据节点:Placeholder 53
3.4 运行环境:会话 55
3.4.1 普通会话:Session 55
3.4.2 交互式会话:InteractiveSession 59
3.4.3 扩展阅读:会话实现原理 59
3.5 训练工具:优化器 61
3.5.1 损失函数与优化算法 61
3.5.2 优化器概述 64
3.5.3 使用minimize方法训练模型 66
3.5.4 扩展阅读:模型训练方法进阶 68
3.6 一元线性回归模型的最佳实践 72
3.7 小结 76

第二部分 关键模块篇
第4章 TensorFlow数据处理方法 78
4.1 输入数据集 78
4.1.1 使用输入流水线并行读取数据 78
4.1.2 创建批样例数据的方法 86
4.1.3 填充数据节点的方法 87
4.1.4 处理CIFAR-10数据集的最佳实践 88
4.1.5 扩展阅读:MNIST数据集 91
4.2 模型参数 92
4.2.1 模型参数的典型使用流程 92
4.2.2 使用tf.Variable创建、初始化和更新模型参数 92
4.2.3 使用tf.train.Saver保存和恢复模型参数 98
4.2.4 使用变量作用域处理复杂模型 100
4.3 命令行参数 103
4.3.1 使用argparse解析命令行参数 103
4.3.2 使用tf.app.flags解析命令行参数 108
4.4 小结 111
第5章 TensorFlow编程框架 112
5.1 单机程序编程框架 112
5.1.1 概述 112
5.1.2 创建单机数据流图 114
5.1.3 创建并运行单机会话 116
5.2 分布式程序编程框架 118
5.2.1 PS-worker架构概述 118
5.2.2 分布式程序编程框架概述 120
5.2.3 创建TensorFlow集群 121
5.2.4 将操作放置到目标设备 124
5.2.5 数据并行模式 124
5.2.6 同步训练机制 125
5.2.7 异步训练机制 130
5.2.8 使用Supervisor管理模型训练 131
5.2.9 分布式同步训练的最佳实践 133
5.3 小结 137
第6章 TensorBoard可视化工具 138
6.1 概述 138
6.2 可视化数据流图 142
6.2.1 名字作用域与抽象节点 142
6.2.2 可视化数据流图的最佳实践 144
6.2.3 扩展阅读:汇总数据和事件数据 145
6.2.4 扩展阅读:揭秘tf.summary.FileWriter工作原理 147
6.3 可视化学习过程 149
6.3.1 汇总操作概述 149
6.3.2 使用tf.summary.scalar生成折线图 150
6.3.3 使用tf.summary.histogram生成数据分布图 152
6.3.4 使用tf.summary.image生成图像 154
6.3.5 使用tf.summary.audio生成音频 155
6.3.6 可视化MNIST softmax模型学习过程的最佳实践 156
6.4 可视化高维数据 158
6.4.1 使用TensorBoard可视化高维数据 158
6.4.2 可视化MNIST数据集的最佳实践 160
6.5 小结 163
第7章 模型托管工具:TensorFlow Serving 164
7.1 概述 164
7.2 系统架构 165
7.3 安装 167
7.3.1 使用APT安装ModelServer 168
7.3.2 使用源码编译安装ModelServer 169
7.4 最佳实践 170
7.4.1 导出模型 170
7.4.2 发布模型服务 173
7.4.3 更新线上模型服务 174
7.5 小结 175

第三部分 算法模型篇
第8章 深度学习概述 178
8.1 深度学习的历史 178
8.1.1 感知机模型与神经网络 178
8.1.2 神经网络的寒冬与复苏 179
8.1.3 神经网络的发展与第二次寒冬 181
8.1.4 深度学习时代的到来 183
8.2 深度学习的主要应用 184
8.2.1 计算机视觉 185
8.2.2 自然语言处理 186
8.2.3 强化学习 188
8.3 深度学习与TensorFlow 190
8.4 小结 191
第9章 CNN模型 192
9.1 CNN 192
9.1.1 CNN简介 192
9.1.2 卷积层 193
9.1.3 激活层 195
9.1.4 池化层 195
9.1.5 全连接层 196
9.1.6 Dropout层 196
9.1.7 BN层 197
9.1.8 常用的CNN图像分类模型 197
9.2 TensorFlow-Slim 204
9.2.1 TensorFlow-Slim总体结构 204
9.2.2 datasets包和data包 205
9.2.3 preprocessing包 207
9.2.4 deployment包 207
9.2.5 nets包 209
9.2.6 TensorFlow-Slim最佳实践 212
9.3 应用 216
9.3.1 物体检测 216
9.3.2 图像分割 221
9.4 小结 222
第 10章 GAN模型 223
10.1 原理、特点及应用 223
10.1.1 原理 224
10.1.2 特点 225
10.1.3 应用 226
10.2 GAN模型的改进 228
10.2.1 CGAN模型 228
10.2.2 LAPGAN模型 229
10.2.3 DCGAN模型 230
10.2.4 InfoGAN模型 230
10.2.5 LSGAN模型 231
10.2.6 WGAN模型 232
10.3 最佳实践 233
10.4 小结 238
第 11章 RNN模型 239
11.1 基本RNN单元及其变种 239
11.1.1 RNN模型简介 239
11.1.2 基本RNN单元 240
11.1.3 LSTM单元 242
11.1.4 GRU单元 243
11.1.5 双向RNN单元 244
11.1.6 带有其他特性的RNN单元 245
11.2 RNN模型 247
11.2.1 PTB-LSTM语言模型 247
11.2.2 Seq2Seq模型 251
11.3 小结 254

第四部分 核心揭秘篇
第 12章 TensorFlow运行时核心设计与实现 256
12.1 运行时框架概述 256
12.2 关键数据结构 257
12.2.1 张量相关数据结构 258
12.2.2 设备相关数据结构 260
12.2.3 数据流图相关的数据结构 263
12.3 公共基础机制 266
12.3.1 内存分配 266
12.3.2 线程管理 268
12.3.3 多语言接口 269
12.3.4 XLA编译技术 270
12.3.5 单元测试框架 271
12.4 外部环境接口 272
12.4.1 加速器硬件接口 272
12.4.2 系统软件接口 275
12.5 小结 276
第 13章 通信原理与实现 277
13.1 概述 277
13.2 进程内通信 278
13.2.1 通信接口 278
13.2.2 会合点机制 280
13.2.3 异构设备内存访问 282
13.3 进程间通信 283
13.3.1 gRPC通信机制 284
13.3.2 控制通信 286
13.3.3 数据通信 290
13.4 RDMA通信模块 294
13.4.1 模块结构 295
13.4.2 消息语义 296
13.4.3 通信流程 297
13.5 小结 300
第 14章 数据流图计算原理与实现 301
14.1 概述 301
14.2 数据流图创建 302
14.2.1 流程与抽象 303
14.2.2 全图构造 305
14.2.3 子图提取 306
14.2.4 图切分 307
14.2.5 图优化 308
14.3 单机会话运行 308
14.3.1 流程与抽象 309
14.3.2 执行器获取 311
14.3.3 输入数据填充 312
14.3.4 图运行 313
14.3.5 输出数据获取 315
14.3.6 张量保存 315
14.4 分布式会话运行 315
14.4.1 主-从模型 316
14.4.2 主要抽象 317
14.4.3 client创建会话 319
14.4.4 client请求图运行 320
14.4.5 master驱动图运行 321
14.4.6 worker实施图运行 323
14.5 操作节点执行 325
14.5.1 核函数抽象 325
14.5.2 CPU上的执行流程 326
14.5.3 CUDA GPU上的执行流程 326
14.6 小结 327

第五部分 生态发展篇
第 15章 TensorFlow生态环境 330
15.1 生态环境概况 330
15.1.1 社区托管组件 330
15.1.2 第三方项目 333
15.2 深度神经网络库Keras 334
15.2.1 概述 334
15.2.2 模型概述 335
15.2.3 顺序模型 336
15.2.4 函数式模型 338
15.3 TensorFlow与Kubernetes生态的结合 340
15.4 TensorFlow与Spark生态的结合 344
15.5 TensorFlow通信优化技术 345
15.6 TPU及神经网络处理器 348
15.7 NNVM模块化深度学习组件 349
15.8 TensorFlow未来展望——TFX 351
15.9 小结 353
附录A 354


TensorFlow 贡献者唐源:掌握 Google 深度学习框架的正确姿势

餐具和素材已免费提供,炒不出好菜不要怪工具

TensorFlow 提供的不仅仅只是现有的一些比较热门的模型实现,深度学习和机器学习这个领域的发展是非常快的,很多问题往往不是简单的现有模型能够解决的,最重要的是一个框架的灵活性和可拓展性一定是不能丢的,Spark 的 MLlib 很优秀地实现了一些工业界需求比较大的一些算法,但是 TensorFlow 能提供的不仅仅是这些,它提供了很多建立机器学习和深度学习必有的元素,比如,TensorFlow 有着自己的 metrics、losses、optimizers、layers 等模块来帮助建立各种各样的深度学习模型,它也提供了许多高阶的 Estimator API 来帮助用户更好地搭建和定义自己的分布式的模型,FeatureColumn 模块来帮助数据科学工作中很重要的特征工程,DataFrame 和 QueueRunner 等模块来更好地实现数据的预处理,提取批量队列,等等。另外,TensorFlow 省去了在各种不同的设备(比如 CPU、GPU、TPU)上的实现,用户只需要集中精力调用已经实现好的 API 就可以在各种设备上进行自动优化以及资源分配,这些都是 Spark 目前还不能或者是很难做到的。最近雅虎开源的 TensorFlowOnSpark 也挺有意思,可以在现有的 Spark/Hadoop 分布式集群的基础上部署 TensorFlow 的程序,这样可以避免数据在已有 Spark/Hadoop 集群和深度学习集群间移动,HDFS 里面的数据能够更好地输入进 TensorFlow 的程序当中。

实战

tensoflow-gpu安装

深度学习之TensorFlow:入门、原理与进阶实战

本书通过96个案例,全面讲解了深度学习神经网络原理和TensorFlow的使用方法。全书共分为3篇,第1篇深度学习与TensorFlow基础,包括快速了解人工智能与TensorFlow、搭建开发环境、TensorFlow基本开发步骤、TensorFlow编程基础、识别图中模糊的手写数字等内容;第2篇深度学习基础——神经网络,介绍了神经网络的基础模型,包括单个神经元、多层神经网络、卷积神经网络、循环神经网络、自编码网络等内容;第3篇深度学习进阶,是对基础网络模型的灵活运用与自由组合,是对前面知识的综合及拔高,包括深度神经网络和对抗神经网络两章内容。本书特别适合TensorFlow深度学习的初学者和进阶读者阅读,也适合社会培训班和各大院校对深度学习有兴趣的学生阅读。

目录 · · · · · ·
配套学习资源
前言

第1篇 深度学习与TensorFlow基础

第1章 快速了解人工智能与TensorFlow 2
1.1 什么是深度学习 2
1.2 TensorFlow是做什么的 3
1.3 TensorFlow的特点 4
1.4 其他深度学习框架特点及介绍 5
1.5 如何通过本书学好深度学习 6
1.5.1 深度学习怎么学 6
1.5.2 如何学习本书 7

第2章 搭建开发环境 8
2.1 下载及安装Anaconda开发工具 8
2.2 在Windows平台下载及安装TensorFlow 11
2.3 GPU版本的安装方法 12
2.3.1 安装CUDA软件包 12
2.3.2 安装cuDNN库 13
2.3.3 测试显卡 14
2.4 熟悉Anaconda 3开发工具 15
2.4.1 快速了解Spyder 16
2.4.2 快速了解Jupyter Notebook 18

第3章 TensorFlow基本开发步骤——以逻辑回归拟合二维数据为例 19
3.1 实例1:从一组看似混乱的数据中找出y≈2x的规律 19
3.1.1 准备数据 20
3.1.2 搭建模型 21
3.1.3 迭代训练模型 23
3.1.4 使用模型 25
3.2 模型是如何训练出来的 25
3.2.1 模型里的内容及意义 25
3.2.2 模型内部的数据流向 26
3.3 了解TensorFlow开发的基本步骤 27
3.3.1 定义输入节点的方法 27
3.3.2 实例2:通过字典类型定义输入节点 28
3.3.3 实例3:直接定义输入节点 28
3.3.4 定义“学习参数”的变量 29
3.3.5 实例4:通过字典类型定义“学习参数” 29
3.3.6 定义“运算” 29
3.3.7 优化函数,优化目标 30
3.3.8 初始化所有变量 30
3.3.9 迭代更新参数到最优解 31
3.3.10 测试模型 31
3.3.11 使用模型 31

第4章 TensorFlow编程基础 32
4.1 编程模型 32
4.1.1 了解模型的运行机制 33
4.1.2 实例5:编写hello world程序演示session的使用 34
4.1.3 实例6:演示with session的使用 35
4.1.4 实例7:演示注入机制 35
4.1.5 建立session的其他方法 36
4.1.6 实例8:使用注入机制获取节点 36
4.1.7 指定GPU运算 37
4.1.8 设置GPU使用资源 37
4.1.9 保存和载入模型的方法介绍 38
4.1.10 实例9:保存/载入线性回归模型 38
4.1.11 实例10:分析模型内容,演示模型的其他保存方法 40
4.1.12 检查点(Checkpoint) 41
4.1.13 实例11:为模型添加保存检查点 41
4.1.14 实例12:更简便地保存检查点 44
4.1.15 模型操作常用函数总结 45
4.1.16 TensorBoard可视化介绍 45
4.1.17 实例13:线性回归的TensorBoard可视化 46
4.2 TensorFlow基础类型定义及操作函数介绍 48
4.2.1 张量及操作 49
4.2.2 算术运算函数 55
4.2.3 矩阵相关的运算 56
4.2.4 复数操作函数 58
4.2.5 规约计算 59
4.2.6 分割 60
4.2.7 序列比较与索引提取 61
4.2.8 错误类 62
4.3 共享变量 62
4.3.1 共享变量用途 62
4.3.2 使用get-variable获取变量 63
4.3.3 实例14:演示get_variable和Variable的区别 63
4.3.4 实例15:在特定的作用域下获取变量 65
4.3.5 实例16:共享变量功能的实现 66
4.3.6 实例17:初始化共享变量的作用域 67
4.3.7 实例18:演示作用域与操作符的受限范围 68
4.4 实例19:图的基本操作 70
4.4.1 建立图 70
4.4.2 获取张量 71
4.4.3 获取节点操作 72
4.4.4 获取元素列表 73
4.4.5 获取对象 73
4.4.6 练习题 74
4.5 配置分布式TensorFlow 74
4.5.1 分布式TensorFlow的角色及原理 74
4.5.2 分布部署TensorFlow的具体方法 75
4.5.3 实例20:使用TensorFlow实现分布式部署训练 75
4.6 动态图(Eager) 81
4.7 数据集(tf.data) 82

第5章 识别图中模糊的手写数字(实例21) 83
5.1 导入图片数据集 84
5.1.1 MNIST数据集介绍 84
5.1.2 下载并安装MNIST数据集 85
5.2 分析图片的特点,定义变量 87
5.3 构建模型 87
5.3.1 定义学习参数 87
5.3.2 定义输出节点 88
5.3.3 定义反向传播的结构 88
5.4 训练模型并输出中间状态参数 89
5.5 测试模型 90
5.6 保存模型 91
5.7 读取模型 92

第2篇 深度学习基础——神经网络

第6章 单个神经元 96
6.1 神经元的拟合原理 96
6.1.1 正向传播 98
6.1.2 反向传播 98
6.2 激活函数——加入非线性因素,解决线性模型缺陷 99
6.2.1 Sigmoid函数 99
6.2.2 Tanh函数 100
6.2.3 ReLU函数 101
6.2.4 Swish函数 103
6.2.5 激活函数总结 103
6.3 softmax算法——处理分类问题 103
6.3.1 什么是softmax 104
6.3.2 softmax原理 104
6.3.3 常用的分类函数 105
6.4 损失函数——用真实值与预测值的距离来指导模型的收敛方向 105
6.4.1 损失函数介绍 105
6.4.2 TensorFlow中常见的loss函数 106
6.5 softmax算法与损失函数的综合应用 108
6.5.1 实例22:交叉熵实验 108
6.5.2 实例23:one_hot实验 109
6.5.3 实例24:sparse交叉熵的使用 110
6.5.4 实例25:计算loss值 110
6.5.5 练习题 111
6.6 梯度下降——让模型逼近最小偏差 111
6.6.1 梯度下降的作用及分类 111
6.6.2 TensorFlow中的梯度下降函数 112
6.6.3 退化学习率——在训练的速度与精度之间找到平衡 113
6.6.4 实例26:退化学习率的用法举例 114
6.7 初始化学习参数 115
6.8 单个神经元的扩展——Maxout网络 116
6.8.1 Maxout介绍 116
6.8.2 实例27:用Maxout网络实现MNIST分类 117
6.9 练习题 118

第7章 多层神经网络——解决非线性问题 119
7.1 线性问题与非线性问题 119
7.1.1 实例28:用线性单分逻辑回归分析肿瘤是良性还是恶性的 119
7.1.2 实例29:用线性逻辑回归处理多分类问题 123
7.1.3 认识非线性问题 129
7.2 使用隐藏层解决非线性问题 130
7.2.1 实例30:使用带隐藏层的神经网络拟合异或操作 130
7.2.2 非线性网络的可视化及其意义 133
7.2.3 练习题 135
7.3 实例31:利用全连接网络将图片进行分类 136
7.4 全连接网络训练中的优化技巧 137
7.4.1 实例32:利用异或数据集演示过拟合问题 138
7.4.2 正则化 143
7.4.3 实例33:通过正则化改善过拟合情况 144
7.4.4 实例34:通过增大数据集改善过拟合 145
7.4.5 练习题 146
7.4.6 dropout——训练过程中,将部分神经单元暂时丢弃 146
7.4.7 实例35:为异或数据集模型添加dropout 147
7.4.8 实例36:基于退化学习率dropout技术来拟合异或数据集 149
7.4.9 全连接网络的深浅关系 150
7.5 练习题 150

第8章 卷积神经网络——解决参数太多问题 151
8.1 全连接网络的局限性 151
8.2 理解卷积神经网络 152
8.3 网络结构 153
8.3.1 网络结构描述 153
8.3.2 卷积操作 155
8.3.3 池化层 157
8.4 卷积神经网络的相关函数 158
8.4.1 卷积函数tf.nn.conv2d 158
8.4.2 padding规则介绍 159
8.4.3 实例37:卷积函数的使用 160
8.4.4 实例38:使用卷积提取图片的轮廓 165
8.4.5 池化函数tf.nn.max_pool(avg_pool) 167
8.4.6 实例39:池化函数的使用 167
8.5 使用卷积神经网络对图片分类 170
8.5.1 CIFAR介绍 171
8.5.2 下载CIFAR数据 172
8.5.3 实例40:导入并显示CIFAR数据集 173
8.5.4 实例41:显示CIFAR数据集的原始图片 174
8.5.5 cifar10_input的其他功能 176
8.5.6 在TensorFlow中使用queue 176
8.5.7 实例42:协调器的用法演示 178
8.5.8 实例43:为session中的队列加上协调器 179
8.5.9 实例44:建立一个带有全局平均池化层的卷积神经网络 180
8.5.10 练习题 183
8.6 反卷积神经网络 183
8.6.1 反卷积神经网络的应用场景 184
8.6.2 反卷积原理 184
8.6.3 实例45:演示反卷积的操作 185
8.6.4 反池化原理 188
8.6.5 实例46:演示反池化的操作 189
8.6.6 实例47:演示gradients基本用法 192
8.6.7 实例48:使用gradients对多个式子求多变量偏导 192
8.6.8 实例49:演示梯度停止的实现 193
8.7 实例50:用反卷积技术复原卷积网络各层图像 195
8.8 善用函数封装库 198
8.8.1 实例51:使用函数封装库重写CIFAR卷积网络 198
8.8.2 练习题 201
8.9 深度学习的模型训练技巧 201
8.9.1 实例52:优化卷积核技术的演示 201
8.9.2 实例53:多通道卷积技术的演示 202
8.9.3 批量归一化 204
8.9.4 实例54:为CIFAR图片分类模型添加BN 207
8.9.5 练习题 209

第9章 循环神经网络——具有记忆功能的网络 210
9.1 了解RNN的工作原理 210
9.1.1 了解人的记忆原理 210
9.1.2 RNN网络的应用领域 212
9.1.3 正向传播过程 212
9.1.4 随时间反向传播 213
9.2 简单RNN 215
9.2.1 实例55:简单循环神经网络实现——裸写一个退位减法器 215
9.2.2 实例56:使用RNN网络拟合回声信号序列 220
9.3 循环神经网络(RNN)的改进 225
9.3.1 LSTM网络介绍 225
9.3.2 窥视孔连接(Peephole) 228
9.3.3 带有映射输出的STMP 230
9.3.4 基于梯度剪辑的cell 230
9.3.5 GRU网络介绍 230
9.3.6 Bi-RNN网络介绍 231
9.3.7 基于神经网络的时序类分类CTC 232
9.4 TensorFlow实战RNN 233
9.4.1 TensorFlow中的cell类 233
9.4.2 通过cell类构建RNN 234
9.4.3 实例57:构建单层LSTM网络对MNIST数据集分类 239
9.4.4 实例58:构建单层GRU网络对MNIST数据集分类 240
9.4.5 实例59:创建动态单层RNN网络对MNIST数据集分类 240
9.4.6 实例60:静态多层LSTM对MNIST数据集分类 241
9.4.7 实例61:静态多层RNN-LSTM连接GRU对MNIST数据集分类 242
9.4.8 实例62:动态多层RNN对MNIST数据集分类 242
9.4.9 练习题 243
9.4.10 实例63:构建单层动态双向RNN对MNIST数据集分类 243
9.4.11 实例64:构建单层静态双向RNN对MNIST数据集分类 244
9.4.12 实例65:构建多层双向RNN对MNIST数据集分类 246
9.4.13 实例66:构建动态多层双向RNN对MNIST数据集分类 247
9.4.14 初始化RNN 247
9.4.15 优化RNN 248
9.4.16 实例67:在GRUCell中实现LN 249
9.4.17 CTC网络的loss——ctc_loss 251
9.4.18 CTCdecoder 254
9.5 实例68:利用BiRNN实现语音识别 255
9.5.1 语音识别背景 255
9.5.2 获取并整理样本 256
9.5.3 训练模型 265
9.5.4 练习题 272
9.6 实例69:利用RNN训练语言模型 273
9.6.1 准备样本 273
9.6.2 构建模型 275
9.7 语言模型的系统学习 279
9.7.1 统计语言模型 279
9.7.2 词向量 279
9.7.3 word2vec 281
9.7.4 实例70:用CBOW模型训练自己的word2vec 283
9.7.5 实例71:使用指定侯选采样本训练word2vec 293
9.7.6 练习题 296
9.8 处理Seq2Seq任务 296
9.8.1 Seq2Seq任务介绍 296
9.8.2 Encoder-Decoder框架 297
9.8.3 实例72:使用basic_rnn_seq2seq拟合曲线 298
9.8.4 实例73:预测当天的股票价格 306
9.8.5 基于注意力的Seq2Seq 310
9.8.6 实例74:基于Seq2Seq注意力模型实现中英文机器翻译 313
9.9 实例75:制作一个简单的聊天机器人 339
9.9.1 构建项目框架 340
9.9.2 准备聊天样本 340
9.9.3 预处理样本 340
9.9.4 训练样本 341
9.9.5 测试模型 342
9.10 时间序列的高级接口TFTS 344

第10章 自编码网络——能够自学习样本特征的网络 346
10.1 自编码网络介绍及应用 346
10.2 最简单的自编码网络 347
10.3 自编码网络的代码实现 347
10.3.1 实例76:提取图片的特征,并利用特征还原图片 347
10.3.2 线性解码器 351
10.3.3 实例77:提取图片的二维特征,并利用二维特征还原图片 351
10.3.4 实例78:实现卷积网络的自编码 356
10.3.5 练习题 358
10.4 去噪自编码 359
10.5 去噪自编码网络的代码实现 359
10.5.1 实例79:使用去噪自编码网络提取MNIST特征 359
10.5.2 练习题 363
10.6 栈式自编码 364
10.6.1 栈式自编码介绍 364
10.6.2 栈式自编码在深度学习中的意义 365
10.7 深度学习中自编码的常用方法 366
10.7.1 代替和级联 366
10.7.2 自编码的应用场景 366
10.8 去噪自编码与栈式自编码的综合实现 366
10.8.1 实例80:实现去噪自编码 367
10.8.2 实例81:添加模型存储支持分布训练 375
10.8.3 小心分布训练中的“坑” 376
10.8.4 练习题 377
10.9 变分自编码 377
10.9.1 什么是变分自编码 377
10.9.2 实例82:使用变分自编码模拟生成MNIST数据 377
10.9.3 练习题 384
10.10 条件变分自编码 385
10.10.1 什么是条件变分自编码 385
10.10.2 实例83:使用标签指导变分自编码网络生成MNIST数据 385

第3篇 深度学习进阶

第11章 深度神经网络 392
11.1 深度神经网络介绍 392
11.1.1 深度神经网络起源 392
11.1.2 经典模型的特点介绍 393
11.2 GoogLeNet模型介绍 394
11.2.1 MLP卷积层 394
11.2.2 全局均值池化 395
11.2.3 Inception 原始模型 396
11.2.4 Inception v1模型 396
11.2.5 Inception v2模型 397
11.2.6 Inception v3模型 397
11.2.7 Inception v4模型 399
11.3 残差网络(ResNet) 399
11.3.1 残差网络结构 399
11.3.2 残差网络原理 400
11.4 Inception-ResNet-v2结构 400
11.5 TensorFlow中的图片分类模型库——slim 400
11.5.1 获取models中的slim模块代码 401
11.5.2 models中的Slim目录结构 401
11.5.3 slim中的数据集处理 403
11.5.4 实例84:利用slim读取TFRecord中的数据 405
11.5.5 在slim中训练模型 407
11.6 使用slim中的深度网络模型进行图像的识别与检测 410
11.6.1 实例85:调用Inception_ResNet_v2模型进行图像识别 410
11.6.2 实例86:调用VGG模型进行图像检测 413
11.7 实物检测模型库——Object Detection API 417
11.7.1 准备工作 418
11.7.2 实例87:调用Object Detection API进行实物检测 421
11.8 实物检测领域的相关模型 425
11.8.1 RCNN基于卷积神经网络特征的区域方法 426
11.8.2 SPP-Net:基于空间金字塔池化的优化RCNN方法 426
11.8.3 Fast-R-CNN快速的RCNN模型 426
11.8.4 YOLO:能够一次性预测多个位置和类别的模型 427
11.8.5 SSD:比YOLO更快更准的模型 428
11.8.6 YOLO2:YOLO的升级版模型 428
11.9 机器自己设计的模型(NASNet) 428

第12章 对抗神经网络(GAN) 430
12.1 GAN的理论知识 430
12.1.1 生成式模型的应用 431
12.1.2 GAN的训练方法 431
12.2 DCGAN——基于深度卷积的GAN 432
12.3 InfoGAN和ACGAN:指定类别生成模拟样本的GAN 432
12.3.1 InfoGAN:带有隐含信息的GAN 432
12.3.2 AC-GAN:带有辅助分类信息的GAN 433
12.3.3 实例88:构建InfoGAN生成MNIST模拟数据 434
12.3.4 练习题 440
12.4 AEGAN:基于自编码器的GAN 441
12.4.1 AEGAN原理及用途介绍 441
12.4.2 实例89:使用AEGAN对MNIST数据集压缩特征及重建 442
12.5 WGAN-GP:更容易训练的GAN 447
12.5.1 WGAN:基于推土机距离原理的GAN 448
12.5.2 WGAN-GP:带梯度惩罚项的WGAN 449
12.5.3 实例90:构建WGAN-GP生成MNIST数据集 451
12.5.4 练习题 455
12.6 LSGAN(最小乘二GAN):具有WGAN 同样效果的GAN 455
12.6.1 LSGAN介绍 455
12.6.2 实例91:构建LSGAN生成MNIST模拟数据 456
12.7 GAN-cls:具有匹配感知的判别器 457
12.7.1 GAN-cls的具体实现 458
12.7.2 实例92:使用GAN-cls技术实现生成标签匹配的模拟数据 458
12.8 SRGAN——适用于超分辨率重建的GAN 461
12.8.1 超分辨率技术 461
12.8.2 实例93:ESPCN实现MNIST数据集的超分辨率重建 463
12.8.3 实例94:ESPCN实现flowers数据集的超分辨率重建 466
12.8.4 实例95:使用残差网络的ESPCN 472
12.8.5 SRGAN的原理 477
12.8.6 实例96:使用SRGAN实现flowers数据集的超分辨率修复 477
12.9 GAN网络的高级接口TFGAN 485
12.10 总结 486

TensorFlow机器学习项目实战

目录 · · · · · ·

第1章 探索和转换数据 1
1.1 TensorFlow的主要数据结构—
张量 1
1.1.1 张量的属性—阶、形状和
类型 1
1.1.2 创建新的张量 3
1.1.3 动手工作—与TensorFlow
交互 4
1.2 处理计算工作流—TensorFlow
的数据流图 5
1.2.1 建立计算图 5
1.2.2 数据供给 6
1.2.3 变量 6
1.2.4 保存数据流图 6
1.3 运行我们的程序—会话 8
1.4 基本张量方法 8
1.4.1 简单矩阵运算 8
1.4.2 序列 11
1.4.3 张量形状变换 12
1.4.4 数据流结构和结果可视化—
TensorBoard 14
1.5 从磁盘读取信息 18
1.5.1 列表格式—CSV 18
1.5.2 读取图像数据 19
1.5.3 加载和处理图像 20
1.5.4 读取标准TensorFlow格式 21
1.6 小结 21

第2章 聚类 22
2.1 从数据中学习—无监督学习 22
2.2 聚类的概念 22
2.3 k均值 23
2.3.1 k均值的机制 23
2.3.2 算法迭代判据 23
2.3.3 k均值算法拆解 24
2.3.4 k均值的优缺点 25
2.4 k最近邻 25
2.4.1 k最近邻算法的机制 26
2.4.2 k-nn的优点和缺点 26
2.5 有用的库和使用示例 27
2.5.1 matplotlib绘图库 27
2.5.2 scikit-learn数据集模块 28
2.5.3 人工数据集类型 28
2.6 例1—对人工数据集的k均值
聚类 29
2.6.1 数据集描述和加载 29
2.6.2 模型架构 30
2.6.3 损失函数描述和优化循环 31
2.6.4 停止条件 31
2.6.5 结果描述 31
2.6.6 每次迭代中的质心变化 32
2.6.7 完整源代码 32
2.6.8 k均值用于环状数据集 34
2.7 例2—对人工数据集使用最近
邻算法 36
2.7.1 数据集生成 36
2.7.2 模型结构 36
2.7.3 损失函数描述 37
2.7.4 停止条件 37
2.7.5 结果描述 37
2.7.6 完整源代码 37
2.8 小结 39

第3章 线性回归 40
3.1 单变量线性模型方程 40
3.2 选择损失函数 41
3.3 最小化损失函数 42
3.3.1 最小方差的全局最小值 42
3.3.2 迭代方法:梯度下降 42
3.4 示例部分 43
3.4.1 TensorFlow中的优化方法—
训练模块 43
3.4.2 tf.train.Optimizer类 43
3.4.3 其他Optimizer实例类型 44
3.5 例1—单变量线性回归 44
3.5.1 数据集描述 45
3.5.2 模型结构 45
3.5.3 损失函数描述和Optimizer 46
3.5.4 停止条件 48
3.5.5 结果描述 48
3.5.6 完整源代码 49
3.6 例2—多变量线性回归 51
3.6.1 有用的库和方法 51
3.6.2 Pandas库 51
3.6.3 数据集描述 51
3.6.4 模型结构 53
3.6.5 损失函数和Optimizer 54
3.6.6 停止条件 55
3.6.7 结果描述 55
3.6.8 完整源代码 56
3.7 小结 57

第4章 逻辑回归 58
4.1 问题描述 58
4.2 Logistic函数的逆函数—Logit
函数 59
4.2.1 伯努利分布 59
4.2.2 联系函数 60
4.2.3 Logit函数 60
4.2.4 对数几率函数的逆函数—
Logistic函数 60
4.2.5 多类分类应用—Softmax
回归 62
4.3 例1—单变量逻辑回归 64
4.3.1 有用的库和方法 64
4.3.2 数据集描述和加载 65
4.3.3 模型结构 67
4.3.4 损失函数描述和优化器
循环 67
4.3.5 停止条件 68
4.3.6 结果描述 68
4.3.7 完整源代码 69
4.3.8 图像化表示 71
4.4 例2—基于skflow单变量逻辑
回归 72
4.4.1 有用的库和方法 72
4.4.2 数据集描述 72
4.4.3 模型结构 72
4.4.4 结果描述 73
4.4.5 完整源代码 74
4.5 小结 74

第5章 简单的前向神经网络 75
5.1 基本概念 75
5.1.1 人工神经元 75
5.1.2 神经网络层 76
5.1.3 有用的库和方法 78
5.2 例1—非线性模拟数据
回归 79
5.2.1 数据集描述和加载 79
5.2.2 数据集预处理 80
5.2.3 模型结构—损失函数
描述 80
5.2.4 损失函数优化器 80
5.2.5 准确度和收敛测试 80
5.2.6 完整源代码 80
5.2.7 结果描述 81
5.3 例2—通过非线性回归,对
汽车燃料效率建模 82
5.3.1 数据集描述和加载 82
5.3.2 数据预处理 83
5.3.3 模型架构 83
5.3.4 准确度测试 84
5.3.5 结果描述 84
5.3.6 完整源代码 84
5.4 例3—多类分类:葡萄酒
分类 86
5.4.1 数据集描述和
加载 86
5.4.2 数据集预处理 86
5.4.3 模型架构 87
5.4.4 损失函数描述 87
5.4.5 损失函数优化器 87
5.4.6 收敛性测试 88
5.4.7 结果描述 88
5.4.8 完整源代码 88
5.5 小结 89

第6章 卷积神经网络 90
6.1 卷积神经网络的起源 90
6.1.1 卷积初探 90
6.1.2 降采样操作—池化 95
6.1.3 提高效率—dropout
操作 98
6.1.4 卷积类型层构建办法 99
6.2 例1—MNIST数字分类 100
6.2.1 数据集描述和加载 100
6.2.2 数据预处理 102
6.2.3 模型结构 102
6.2.4 损失函数描述 103
6.2.5 损失函数优化器 103
6.2.6 准确性测试 103
6.2.7 结果描述 103
6.2.8 完整源代码 104
6.3 例2—CIFAR10数据集的图像
分类 106
6.3.1 数据集描述和加载 107
6.3.2 数据集预处理 107
6.3.3 模型结构 108
6.3.4 损失函数描述和
优化器 108
6.3.5 训练和准确性测试 108
6.3.6 结果描述 108
6.3.7 完整源代码 109
6.4 小结 110

第7章 循环神经网络和LSTM 111
7.1 循环神经网络 111
7.1.1 梯度爆炸和梯度消失 112
7.1.2 LSTM神经网络 112
7.1.3 其他RNN结构 116
7.1.4 TensorFlow LSTM有用的类和
方法 116
7.2 例1—能量消耗、单变量时间序
列数据预测 117
7.2.1 数据集描述和加载 117
7.2.2 数据预处理 118
7.2.3 模型结构 119
7.2.4 损失函数描述 121
7.2.5 收敛检测 121
7.2.6 结果描述 122
7.2.7 完整源代码 122
7.3 例2—创作巴赫风格的
曲目 125
7.3.1 字符级模型 125
7.3.2 字符串序列和概率表示 126
7.3.3 使用字符对音乐编码—
ABC音乐格式 126
7.3.4 有用的库和方法 128
7.3.5 数据集描述和加载 129
7.3.6 网络训练 129
7.3.7 数据集预处理 130
7.3.8 损失函数描述 131
7.3.9 停止条件 131
7.3.10 结果描述 131
7.3.11 完整源代码 132
7.4 小结 137

第8章 深度神经网络 138
8.1 深度神经网络的定义 138
8.2 深度网络结构的历史变迁 138
8.2.1 LeNet 5 138
8.2.2 Alexnet 139
8.2.3 VGG模型 139
8.2.4 第一代Inception模型 140
8.2.5 第二代Inception模型 141
8.2.6 第三代Inception模型 141
8.2.7 残差网络(ResNet) 142
8.2.8 其他的深度神经网络
结构 143
8.3 例子—VGG艺术风格转移 143
8.3.1 有用的库和方法 143
8.3.2 数据集描述和加载 143
8.3.3 数据集预处理 144
8.3.4 模型结构 144
8.3.5 损失函数 144
8.3.6 收敛性测试 145
8.3.7 程序执行 145
8.3.8 完整源代码 146
8.4 小结 153

第9章 规模化运行模型—GPU和
服务 154
9.1 TensorFlow中的GPU支持 154
9.2 打印可用资源和设备参数 155
9.2.1 计算能力查询 155
9.2.2 选择CPU用于计算 156
9.2.3 设备名称 156
9.3 例1—将一个操作指派给
GPU 156
9.4 例2—并行计算Pi的数值 157
9.4.1 实现方法 158
9.4.2 源代码 158
9.5 分布式TensorFlow 159
9.5.1 分布式计算组件 159
9.5.2 创建TensorFlow集群 160
9.5.3 集群操作—发送计算方法
到任务 161
9.5.4 分布式编码结构示例 162
9.6 例3—分布式Pi计算 163
9.6.1 服务器端脚本 163
9.6.2 客户端脚本 164
9.7 例4—在集群上运行分布式
模型 165
9.8 小结 168

第10章 库的安装和其他技巧 169
10.1 Linux安装 169
10.1.1 安装要求 170
10.1.2 Ubuntu安装准备(安装操作的
前期操作) 170
10.1.3 Linux下通过pip安装
TensorFlow 170
10.1.4 Linux下从源码安装
TensorFlow 175
10.2 Windows安装 179
10.2.1 经典的Docker工具箱
方法 180
10.2.2 安装步骤 180
10.3 MacOS X安装 183
10.4 小结 185

入门|极致的优化:智能手机是如何处理大型神经网络的

运行深度神经网络对计算能力、能耗及磁盘空间要求甚高,智能手机的计算资源十分有限,需要多种优化才能高效运行深度学习应用。本文介绍了如何在移动设备的各种指标之间取得平衡,在避免大幅度降低准确性的前提下构造更加轻便的神经网络,使得在移动设备上快速、准确地运行神经网络成为可能。

电脑拥有大容量硬盘和强大的 CPU 与 GPU,但智能手机没有。为了弥补这些硬件上的不足,智能手机需要一些特殊手段才能高效地运行深度学习应用。

智能手机有办法与这些强大的服务器集群竞争吗?还是完全没有希望?

引言

深度学习是一种功能十分多样和强大的技术,但是运行神经网络对计算能力、能耗及磁盘空间要求甚高。这对于在具有大型硬盘和多个 GPU 的服务器上运行的云应用来说一般不是问题。

不幸的是,在移动设备上运行神经网络并非易事。事实上,尽管智能手机的功能越来越强大,它们的计算能力、电池寿命及可用的磁盘空间依然十分有限,特别是那些非常依赖轻便性的应用。把应用做得轻便可以加快下载速度,减少更新,并且延长电池寿命,而这些都是用户迫切需要的。

为了执行图像分类、人像模式摄影、文本预测以及其他几十项任务,智能手机需要使用特殊方法来快速、准确地运行神经网络,且不占用过多内存空间。

在这篇文章中,我们将会了解一些最有效的、能让神经网络在手机上实时运行的技术。

能使神经网络更小更快的技术

基本上来讲,我们只对三个指标感兴趣:模型的准确率、速度、在手机中占用的内存。天下没有免费的午餐,因此我们不得不在这些指标之间作出一些权衡。

对于大部分技术来说,我们一边要关注指标,一边还要寻找一个叫做「饱和点」(saturation point)的东西。达到这个点之后,利用其他指标的损失实现某个指标的增益将不再可行。在到达饱和点前保持优化值,可以在两个指标上取得最佳结果。

在这个例子中,我们可以在不增加误差的情况下显著减少代价昂贵的运算。但是,在超过饱和点之后,误差的严重程度高到不可接受。

记住这个方法,让我们开始吧!

  1. 避免全连接层

全连接层是神经网络中最常见的部分,它们通常能发挥很大作用。然而,由于每一个神经元都和前一层的所有神经元相连接,因此它们需要存储和更新大量参数,这对速度和磁盘空间都很不利。

卷积层是利用输入(通常是图像)中局部一致性的层。每一个神经元不再与前一层的所有神经元相连。这有助于网络在保持高度准确性的同时减少连接/权重的数量。


全连接层的连接/权重数量要远远多于卷积层。

使用少连接或非全连接的层能缩小模型的体积,同时保持其高准确性。这种方法可以提高速度,同时减少磁盘使用量。

在上面提到的构造中,一个拥有 1024 个输入、 512 个输出的全连接层大约有 500k 个参数。而一个拥有相同特征以及 32 个特征图的卷积层只需要大约 50k 个参数。这是一个 10 倍的提升。

  1. 减少通道数量与卷积核大小

这一步展现了在模型复杂度与速度之间作出的一个非常直接的权衡。拥有大量通道的卷积层能使网络提取相关信息,但也要付出相应的代价。剔除一些特征图是一个节约空间、加速模型的简单方法。

我们可以运用卷积运算的感受野来做同样的事情。通过缩小卷积核大小,卷积对局部模式的感知减少,但涉及的参数也减少了。


缩小感受野/卷积核大小可以降低计算成本,但是传递的信息会变少。

在这两种情况下,我们通过找到饱和点来选择特征图的数量/卷积核大小,以保证准确性不会下降太多。

  1. 优化降采样

对于固定数量的层和固定数量的池化操作,神经网络可能会表现得天差地别。这是由于数据的表征以及计算量大小取决于这些池化操作于何处完成。

如果池化操作较早完成,数据的维数会减少。维数越少,网络的处理速度越快,但信息量会减少,准确性也会降低。
如果网络中的池化操作完成较晚,那么大部分信息会被保留下来,因此准确度高。然而这也意味着计算是在多维对象上完成的,这会导致计算成本的增加。
于神经网络中均匀布置降采样是一种行之有效的结构(https://arxiv.org/pdf/1710.02759.pdf),而且能在准确性与速度之间保持良好的平衡。这也是一种饱和点。

较早的池化速度快,延后的池化精确性高,均匀布置池化能兼具二者的一些优点。

  1. 权重修剪

在一个经过训练的神经网络中,有些权重对于某个神经元单元的激活值至关重要,而其他的权重基本不影响结果。尽管如此,我们仍要对这些不那么重要的权重做一些计算。

修剪(pruning)是一个完全删除最小强度连接的过程,这样我们就可以跳过这些计算。这会降低准确性但是能让网络更快更精简。我们需要找出饱和点,然后在尽量不影响准确性的情况下删去尽可能多的连接。


删去最弱的连接来节省计算时间与空间。

  1. 离散化权重

为了在磁盘中保存神经网络,我们需要记录网络中每一个权重的值。这意味着我们需要为每一个参数保存一个浮点数,同时也意味着大量磁盘空间的消耗。举例说明,在 C 中一个浮点数占据 4 个字节,即 32 位。一个有着上亿参数的网络(如 Google-Net 或 VGG-16)会轻易占据上百兆字节的空间,而这样的消耗在移动设备中是不可接受的。

为了尽量减小网络存储的量,一种方法是通过离散化权重来降低权重的精度。在这个过程当中,我们更改数字的表示使其不再表示具体值,而是限制其为数值的子集。这样我们只需要存储一次经过离散化的值,然后将它们映射到网络的权重上。


离散化权重存储索引而非浮点值。

我们再次需要通过找到饱和点来决定到底使用多少个值。使用更多数值意味着准确性的提高,但也意味着更大的表征空间。举个例子:如果使用 256 个经过离散化的值,每一个权重只需要使用 1 个字节(即 8 位)就能表示。相比之前(32 位),我们将其大小缩减了四倍!

  1. 模型表征的编码

我们已经对权重作了许多处理,但是还能进一步改进网络!这个特殊技巧源于权重分布不均的事实。一旦权重被离散化,我们就会失去相同数量的对应每一个离散化值的权重。这意味着在我们的模型表征中,某些索引的出现频率相对更高,我们可以利用这一点!

哈夫曼编码(Huffman coding)能完美地解决这个问题。它通过给最常用的值分配最小索引以及给最不常用的值分配最大索引来解决这些问题。这有助于减小设备上模型的体积,最关键的是不会降低准确性。


访问次数最多的符号只使用 1 位的空间,而访问次数最少的符号使用 3 位的空间。这是因为后者在数据表示中出现的次数很少,并由此可以达到一种空间上的平衡。

这个简单的技巧使我们能够进一步缩小神经网络占用的空间,通常能减少 30% 左右。

注意:每一层的离散化和编码可以是不同的,从而提供更大的灵活性。

修正准确率损失

通过我们使用的方法,神经网络已经十分精简了。我们删去了弱连接(修剪),甚至改变了一些权重(离散化)。在网络变得十分轻巧快速的同时,其准确率也不如以前了。

为了修正这一点,我们需要迭代地重新训练网络的每一步。这代表我们需要在修剪和离散化操作之后,再次训练网络使其可以拟合相应的变化,然后重复这一过程直到权重不再大幅变化为止。

结论

尽管智能手机没有优秀的台式机那样的磁盘空间、计算能力或者电池寿命,它们仍是深度学习应用程序的优秀实验对象。通过一系列方法,我们现在可以在这些多功能手持设备上运行强大的神经网络,准确性只是略有下降。这为数千个优秀的应用打开了大门。

如果有兴趣,你也可以了解一些面向移动设备的优秀神经网络,如 SqueezeNet(https://arxiv.org/abs/1602.07360)或 MobileNets(https://arxiv.org/abs/1704.04861)。

TensorFlow发布JavaScript开发者的机器学习框架TensorFlow.js

当时时间 3 月 30 日,谷歌 TenosrFlow 开发者峰会 2018 在美国加州石景山开幕,来自全球的机器学习用户围绕 TensorFlow 展开技术演讲与演示。去年的 TensorFlow 开发者大会上,该框架正式升级到了 1.0 版本,逐渐成为最流行的深度学习框架。今年,TensorFlow 发布了面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js。

在大会上午的 Keynote 中,谷歌大脑负责人 Jeff Dean、TensorFlow 总监 Rajat Monga 等人围绕 TensorFlow 做了表现、流行度等方面的介绍。

据介绍,在过去的两年中,TensorFlow 不断更新,不断改善,逐渐成为社区内最为流行的深度学习框架。下图是从开源以来,TensorFlow 的重大更新,例如 TensorBoard、tfdata、tfkeras、Eager Execution 等。

而且据统计,两年内,TensorFlow 已经有一千一百万下载,超过三万的 commits,6900 以上的 pull requests,1400 多位 contributors。

今年,围绕 TensorFlow,谷歌同样做出了几项重大宣布:

  1. 发布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)与 TensorFlow YouTube 频道;

  2. 面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js;

  3. 发布一系列新的库与工具:例如 TensorFlowHub、TensorFlow Probability API、Nucleus、DeepVariant 等。

在今天的几项重大宣布中,比较有趣的是面向 JavaScript 开发者的全新机器学习框架 TensorFlow.js。在下文中,机器之心对 TensorFlow.js 做了细致介绍:

在大会的 Keynote 中,TensorFlow 团队表示基于网页的 JavaScript 库 TensorFlow.js 现在已经能训练并部署机器学习模型。我们可以使用神经网络的层级 API 构建模型,并在浏览器中使用 WebGL 创建复杂的数据可视化应用。此外 Node.js 很快就会发布,它能为网站模型提供 GPU、TPU 等快速训练与推断的方法。

在 TensorFlow.js 中,我们可以使用最底层的 JavaScript 线性代数库或最高级的 API 在浏览器上开发模型,也能基于浏览器运行已训练的模型。因此,它可以充分利用浏览器和计算机的计算资源实现非常多机器学习应用。例如在网页端训练一个模型来识别图片或语音,训练一个模型以新颖的方式玩游戏或构建一个能创造钢琴音乐的神经网络等。这些新颖的模型作为案例在 TensorFlow.js 中都提供了实现代码,读者也可以跟随教程实现基于浏览器的模型。

TensorFlow.js 项目主页:https://js.tensorflow.org/

TensorFlow.js 的核心概念

TensorFlow.js 是一个开源的用于开发机器学习项目的 WebGL-accelerated JavaScript 库。TensorFlow.js 可以为你提供高性能的、易于使用的机器学习构建模块,允许你在浏览器上训练模型,或以推断模式运行预训练的模型。TensorFlow.js 不仅可以提供低级的机器学习构建模块,还可以提供高级的类似 Keras 的 API 来构建神经网络。

TensorFlow.js 的安装非常简单,我们可以直接使用 NMP 或脚本完成构建。它的使用也有非常多的文档与教程,我们只需要掌握一些基本的核心概念就能快速入手这一 JS 库。接下来,我们介绍这个库的一些核心概念。

Tensor

TensorFlow.js 中的中心数据单元是张量(tensor):一维或多维数组。一个 Tensor 实例的 shape 属性定义了其数组形状(即,数组的每个维度上有多少个值)。

Tensor 主要构造函数是 tf.tensor 函数:

// 2x3 Tensorconst shape = [2, 3]; // 2 rows, 3 columnsconst a = tf.tensor([1.0, 2.0, 3.0, 10.0, 20.0, 30.0], shape);a.print(); // print Tensor values// Output: [[1 , 2 , 3 ],// [10, 20, 30]]// The shape can also be inferred:const b = tf.tensor([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);b.print();// Output: [[1 , 2 , 3 ],// [10, 20, 30]]

Variable

Variable 使用一个张量值来初始化。然而,和 Tensor 不一样,它们的值是可变的。你可以用 assign 方法分配一个新的张量到一个已有的变量(variable):

const initialValues = tf.zeros([5]);const biases = tf.variable(initialValues); // initialize biasesbiases.print(); // output: [0, 0, 0, 0, 0]const updatedValues = tf.tensor1d([0, 1, 0, 1, 0]);biases.assign(updatedValues); // update values of biasesbiases.print(); // output: [0, 1, 0, 1, 0]

Variable 主要用于在模型训练过程中保存和更新值。

Operations (Ops)

Tensor 可以用于保存数据,而 Operation(Op)则可用于操作数据。TensorFlow.js 提供了多种适用于张量的线性代数和机器学习运算的 Op。由于 Tensor 是不可改变的,这些 Op 不会改变它们的值,而会返回新的 Tensor。这些运算不仅包含 add、sub 和 mul 等二元运算,同时还包括 square 等一元运算:

const e = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);const f = tf.tensor2d([[5.0, 6.0], [7.0, 8.0]]);const e_plus_f = e.add(f);e_plus_f.print();// Output: [[6 , 8 ],// [10, 12]]const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);const d_squared = d.square();d_squared.print();// Output: [[1, 4 ],// [9, 16]]

模型和层

从概念上说,一个模型就是一个函数,给定输入之后生成所需要的输出。

在 Tensorflow.js 有两种创建模型的方式:直接使用 Op 表示模型的运算。或者使用高级 API tf.model 来构建以层定义的模型,这在深度学习中是很常用的抽象形式。其实除了以上的特征,Tensorflow.js 还有一些很重要的核心概念,例如内存管理、神经网络基本运算和训练过程等。但我们了解以上概念就能轻松在浏览器中构建出简单的机器学习模型,如下展示了简单线性回归的定义方法:

import * as tf from ‘@tensorflow/tfjs’; // Define a model for linear regression. const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputShape: [1]})); // Prepare the model for training: Specify the loss and the optimizer. model.compile({loss: ‘meanSquaredError’, optimizer: ‘sgd’}); // Generate some synthetic data for training. const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]); const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]); // Train the model using the data. model.fit(xs, ys).then(() => { // Use the model to do inference on a data point the model hasn’t seen before: model.predict(tf.tensor2d([5], [1, 1])).print(); });

目前该项目还是非常新颖的应用,我们非常容易将机器学习模型部署在网页端并在用户的浏览器与硬件实现简单的推断。虽然我们还不清楚实现的效果,但这个 JS 库真正能训练并部署机器学习模型,因此机器之心也将持续关注并尝试构建有意思的应用。

数十种TensorFlow实现案例汇集:代码+笔记

2016年10月18日 17:48:03

这是使用 TensorFlow 实现流行的机器学习算法的教程汇集。本汇集的目标是让读者可以轻松通过案例深入 TensorFlow。

这些案例适合那些想要清晰简明的 TensorFlow 实现案例的初学者。本教程还包含了笔记和带有注解的代码。

项目地址:https://github.com/aymericdamien/TensorFlow-Examples

教程索引

0 - 先决条件

机器学习入门:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/0_Prerequisite/ml_introduction.ipynb

MNIST 数据集入门

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/0_Prerequisite/mnist_dataset_intro.ipynb

1 - 入门

Hello World:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/1_Introduction/helloworld.ipynb

代码https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/helloworld.py

基本操作:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/1_Introduction/basic_operations.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/basic_operations.py

2 - 基本模型

最近邻:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2_BasicModels/nearest_neighbor.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/nearest_neighbor.py

线性回归:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2_BasicModels/linear_regression.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py

Logistic 回归:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/2_BasicModels/logistic_regression.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/logistic_regression.py

3 - 神经网络

多层感知器:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/multilayer_perceptron.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

卷积神经网络:

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/convolutional_network.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py

循环神经网络(LSTM):

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/recurrent_network.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/recurrent_network.py

双向循环神经网络(LSTM):

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/bidirectional_rnn.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/bidirectional_rnn.py

动态循环神经网络(LSTM)

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/dynamic_rnn.py

自编码器

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/autoencoder.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/autoencoder.py

4 - 实用技术

保存和恢复模型

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/4_Utils/save_restore_model.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/4_Utils/save_restore_model.py

图和损失可视化

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/4_Utils/tensorboard_basic.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/4_Utils/tensorboard_basic.py

Tensorboard——高级可视化

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/4_Utils/tensorboard_advanced.py

5 - 多 GPU

多 GPU 上的基本操作

笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/5_MultiGPU/multigpu_basics.ipynb

代码:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/5_MultiGPU/multigpu_basics.py

数据集

一些案例需要 MNIST 数据集进行训练和测试。不要担心,运行这些案例时,该数据集会被自动下载下来(使用 input_data.py)。MNIST 是一个手写数字的数据库,查看这个笔记了解关于该数据集的描述:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/0_Prerequisite/mnist_dataset_intro.ipynb

官方网站:http://yann.lecun.com/exdb/mnist/

更多案例
接下来的示例来自 TFLearn,这是一个为 TensorFlow 提供了简化的接口的库。你可以看看,这里有很多示例和预构建的运算和层。

示例:https://github.com/tflearn/tflearn/tree/master/examples

预构建的运算和层:http://tflearn.org/doc_index/#api

教程
TFLearn 快速入门。通过一个具体的机器学习任务学习 TFLearn 基础。开发和训练一个深度神经网络分类器。

笔记:https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quickstart.md

基础
线性回归,使用 TFLearn 实现线性回归:https://github.com/tflearn/tflearn/blob/master/examples/basics/linear_regression.py

逻辑运算符。使用 TFLearn 实现逻辑运算符:https://github.com/tflearn/tflearn/blob/master/examples/basics/logical.py

权重保持。保存和还原一个模型:https://github.com/tflearn/tflearn/blob/master/examples/basics/weights_persistence.py

微调。在一个新任务上微调一个预训练的模型:https://github.com/tflearn/tflearn/blob/master/examples/basics/finetuning.py

使用 HDF5。使用 HDF5 处理大型数据集:https://github.com/tflearn/tflearn/blob/master/examples/basics/use_hdf5.py

使用 DASK。使用 DASK 处理大型数据集:https://github.com/tflearn/tflearn/blob/master/examples/basics/use_dask.py

计算机视觉
多层感知器。一种用于 MNIST 分类任务的多层感知实现:https://github.com/tflearn/tflearn/blob/master/examples/images/dnn.py

卷积网络(MNIST)。用于分类 MNIST 数据集的一种卷积神经网络实现:https://github.com/tflearn/tflearn/blob/master/examples/images/convnet_mnist.py

卷积网络(CIFAR-10)。用于分类 CIFAR-10 数据集的一种卷积神经网络实现:https://github.com/tflearn/tflearn/blob/master/examples/images/convnet_cifar10.py

网络中的网络。用于分类 CIFAR-10 数据集的 Network in Network 实现:https://github.com/tflearn/tflearn/blob/master/examples/images/network_in_network.py

Alexnet。将 Alexnet 应用于 Oxford Flowers 17 分类任务:https://github.com/tflearn/tflearn/blob/master/examples/images/alexnet.py

VGGNet。将 VGGNet 应用于 Oxford Flowers 17 分类任务:https://github.com/tflearn/tflearn/blob/master/examples/images/vgg_network.py

VGGNet Finetuning (Fast Training)。使用一个预训练的 VGG 网络并将其约束到你自己的数据上,以便实现快速训练:https://github.com/tflearn/tflearn/blob/master/examples/images/vgg_network_finetuning.py

RNN Pixels。使用 RNN(在像素的序列上)分类图像:https://github.com/tflearn/tflearn/blob/master/examples/images/rnn_pixels.py

Highway Network。用于分类 MNIST 数据集的 Highway Network 实现:https://github.com/tflearn/tflearn/blob/master/examples/images/highway_dnn.py

Highway Convolutional Network。用于分类 MNIST 数据集的 Highway Convolutional Network 实现:https://github.com/tflearn/tflearn/blob/master/examples/images/convnet_highway_mnist.py

Residual Network (MNIST) (https://github.com/tflearn/tflearn/blob/master/examples/images/residual_network_mnist.py).。应用于 MNIST 分类任务的一种瓶颈残差网络(bottleneck residual network):https://github.com/tflearn/tflearn/blob/master/examples/images/residual_network_mnist.py

Residual Network (CIFAR-10)。应用于 CIFAR-10 分类任务的一种残差网络:https://github.com/tflearn/tflearn/blob/master/examples/images/residual_network_cifar10.py

Google Inception(v3)。应用于 Oxford Flowers 17 分类任务的谷歌 Inception v3 网络:https://github.com/tflearn/tflearn/blob/master/examples/images/googlenet.py

自编码器。用于 MNIST 手写数字的自编码器:https://github.com/tflearn/tflearn/blob/master/examples/images/autoencoder.py

自然语言处理
循环神经网络(LSTM),应用 LSTM 到 IMDB 情感数据集分类任务:https://github.com/tflearn/tflearn/blob/master/examples/nlp/lstm.py

双向 RNN(LSTM),将一个双向 LSTM 应用到 IMDB 情感数据集分类任务:https://github.com/tflearn/tflearn/blob/master/examples/nlp/bidirectional_lstm.py

动态 RNN(LSTM),利用动态 LSTM 从 IMDB 数据集分类可变长度文本:https://github.com/tflearn/tflearn/blob/master/examples/nlp/dynamic_lstm.py

城市名称生成,使用 LSTM 网络生成新的美国城市名:https://github.com/tflearn/tflearn/blob/master/examples/nlp/lstm_generator_cityname.py

莎士比亚手稿生成,使用 LSTM 网络生成新的莎士比亚手稿:https://github.com/tflearn/tflearn/blob/master/examples/nlp/lstm_generator_shakespeare.py

Seq2seq,seq2seq 循环网络的教学示例:https://github.com/tflearn/tflearn/blob/master/examples/nlp/seq2seq_example.py

CNN Seq,应用一个 1-D 卷积网络从 IMDB 情感数据集中分类词序列:https://github.com/tflearn/tflearn/blob/master/examples/nlp/cnn_sentence_classification.py

强化学习
Atari Pacman 1-step Q-Learning,使用 1-step Q-learning 教一台机器玩 Atari 游戏:https://github.com/tflearn/tflearn/blob/master/examples/reinforcement_learning/atari_1step_qlearning.py

其他

Recommender-Wide&Deep Network,推荐系统中 wide & deep 网络的教学示例:https://github.com/tflearn/tflearn/blob/master/examples/others/recommender_wide_and_deep.py

Notebooks

Spiral Classification Problem,对斯坦福 CS231n spiral 分类难题的 TFLearn 实现:https://github.com/tflearn/tflearn/blob/master/examples/notebooks/spiral.ipynb

可延展的 TensorFlow
层,与 TensorFlow 一起使用 TFLearn 层:https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow/layers.py

训练器,使用 TFLearn 训练器类训练任何 TensorFlow 图:https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow/layers.py

Bulit-in Ops,连同 TensorFlow 使用 TFLearn built-in 操作:https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow/builtin_ops.py

Summaries,连同 TensorFlow 使用 TFLearn summarizers:https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow/summaries.py

Variables,连同 TensorFlow 使用 TFLearn Variables:https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow/variables.py

TensorFlow1.8.0正式发布,Bug修复和改进内容都在这里了

TensorFlow 1.8.0 近日正式发布,新版本主要有以下改进内容,AI科技大本营对其编译如下。

▌主要特点及改进

可以将 tf.contrib.distribute.MirroredStrategy() 传递给 tf.estimator.RunConfig() ,能够在一台有多个 GPU 的机器上运行评估器 (Estimator) 模型。

添加 tf.contrib.data.prefetch_to_device() ,支持预取 GPU 内存。

添加梯度提升树作为预先制作的评估器(Estimator):BoostedTreesClassifier,BoostedTreesRegressor。

为云端 TPU 添加第三代管道配置,提高其性能和可用性。

tf.contrib.bayesflow 转向自己的 repo。

添加了 tf.contrib.{proto,rpc} ,允许通用的原型解析和 RPC 通信。

▌Bug 修复和其他修改
tf.data:

添加 tf.contrib.data.prefetch_to_device ,可以将数据集元素预取到 GPU 内存。

添加 tf.contrib.data.AUTOTUNE ,在 tf.data 运行时,根据系统和环境自动调整预取缓冲区大小。

添加 tf.contrib.data.make_csv_dataset ,构建 CSV 文件数据集。

Eager Execution:

Eager Execution 数据集可以作为标准的 Python 迭代器使用(for batch in dataset:)。当 Eager Execution 启动时,可以使用 Dataset .iter () 和 Dataset.make_one_shot_iterator() 创建迭代器。

已启用自动装置配置(即如果 GPU 是自动接入的,则不需要使用 tf.device(“/gpu:0”))(修复 #14133)

已经将 contrib 的 tf.GradientTape 移出。

tf.keras:

添加了 fashion mnist 数据集。

新的数据预处理功能:image/random_brightness,sequence/TimeseriesGenerator 和 text/hashing_trick。

加速线性代数 (XLA):

选择并分散参考实用程序和评估程序,使用字典顺序来打破关系。
TensorFlow Debugger (tfdbg) CLI:

在 tensor-filter 操作中,允许使用正则表达式排除节点。

修复某些文本终端的虚假背景色。

tf.contrib:

添加重构批量维度的元分发 BatchReshape 。

tf.contrib.layers.recompute_grad 用于 TPU 上的显式梯度检查点。

添 加 tf.contrib.framework.argsort 。

允许 DNNBoostedTreeCombinedEstimator 处理特征列和损失的核心版本。

添加非线性图像变形操作: tf.contrib.image.sparse_image_warp,tf.contrib.image.dense_image_warp 和 tf.contrib.image.interpolate_spline 。

修复 tensor 类型不匹配的 tf.contrib.opt.MultitaskOptimizerWrapper 中的错误。

▌Other
低级图形构造现在被称为 TensorFlow C API 。对于大多数用户而言,这种更改不可见,但在这个版本中可以设置环境变量 TF_C_API_GRAPH_CONSTRUCTION = 0 来禁用此更改。未来的版本将删除禁用此更改的功能。

在 tf.distributions.Distribution 中添加形状描述和指向 tutorial notebook 的指针。

更新 scatter 操作:

添加 tf.scatter_min 和 tf.scatter_max;
扩展 scatter 操作以使用标量更新参数。

仅仅将 cuDNN RNN操作移至内核,用于 TensorFlow 代码库。

为 Conv2d , Conv2dBackpropInput 和 Conv2dBackpropFilter 添加 float64 支持。

为 AvgPool / AvgPoolGrad 添加 float64 支持。

图名称作用域线程为本地,以便在多线程环境中正常工作。

更新 nsync 同步库,避免 Linux 上速度较慢的原语。

在构建自定义操作时,删除了需要在 C include 路径中放置 nsync / public

添加 tf.image.psnr , tf.image.ssim , tf.image.ssim_multiscale , tf.image.image_gradients , tf.image.sobel_edges

将链接添加到 https://js.tensorflow.org

修复正交矩阵的不均匀性。

修复了多图像评估器(Estimator)评估摘要显示不正确的问题。

资源:

源代码(zip)

https://github.com/tensorflow/tensorflow/archive/v1.8.0-rc0.zip

源代码(tar.gz)

https://github.com/tensorflow/tensorflow/archive/v1.8.0-rc0.tar.gz

作者 | annarev
原文链接:https://github.com/tensorflow/tensorflow/releases/

参考资料

TensorFlow-Examples

什么是TensorFlow?

TensorFlow.js 教程

tensorflowjs20180507.JPG

面向 JavaScript 开发者的机器学习框架。

在浏览器中运行机器学习,这意味着不需要安装任何函数库或者驱动程序,只要打开网页,程序就可以运行。另外,TensorFlow.js 支持 WebGL,因此也能使用 GPU 加速运算。

TensorFlow.js 提供三种工作流程,处理各阶段的机器学习模型。

第一、开发者能将以 TensorFlow 或 Keras 预先训练好的模型,转换成 TensorFlow.js 格式,并载入到浏览器中进行推算。

第二、开发者不仅可以载入一个现有的机器学习模型,还能用从使用者浏览器中收集到的图像资料,再训练这个模型,这个技术称为 Image Retraining,Google 表示,PAC- MAN 游戏示例程序就是以这个模式进行,这方法的好处是只要使用少量的资料就能让模型变得更加精准。

当然使用者也能在浏览器中,从头开始建立一个机器学习模型,使用 TensorFlow.js 提供的 API,完全在浏览器中定义、训练以及运行模型,而这些 API 与 Keras 提供的十分相似,使用过的开发者应该可以很快上手。

TensorFlow.js 项目主页:https://js.tensorflow.org/。

基本用法

使用 tensorFlow.js 可以在 web 页面中引入 tensorFlow.js 类库。









Pure javascript deeplearnjs demos

Trying to make the largest repository of deeplearnjs example code

从Brain.js到Mind,一文收录11个移动端Javascript机器学习库

Using a Neural Network to recognize MNIST digets in JavaScript.

Machine Learning with JavaScript

TensorFlow.js

A WebGL accelerated, browser based JavaScript library for training and deploying ML models.

Develop ML in the Browser
Use flexible and intuitive APIs to build and train models from scratch using the low-level JavaScript linear algebra library or the high-level layers API

Run Existing models
Use TensorFlow.js model converters to run pre-existing TensorFlow models right in the browser.

Retrain Existing models
Retrain pre-existing ML models using sensor data connected to the browser, or other client-side data.

How to create a Neural Network in JavaScript in only 30 lines of code

Deep Learning with JavaScript

欢迎关注我的其它发布渠道