本书是一本Web开发和深度学习跨界的入门实践指南,主要介绍基于浏览器的深度学习技术,具体内容包括神经网络架构、主流的JavaScript深度学习框架、深度学习的JavaScript基础、基于WebGL的GPU加速、浏览器上的数据抽取和操作,以及tensorflow.js实践应用。每章都配有完整的代码示例以及可视化效果,轻松易学。书中还详细介绍tensorflow.js重要的模块tfjs-core、tfjs-layers、tfjs-node、tfjs-converter等。
本书是一本在浏览器中进行深度学习应用的入门实践指南,主要内容包括神经网络架构、主流的JavaScript深度学习框架、深度学习的JavaScript基础、基于web GL的加速、浏览器上的数据提取和数据操作,以及TensorFlow.js实践应用。每章都配有完整的代码示例和可视化效果,轻松易学。书中还详细介绍TensorFlow.js中的重要模块tfjs-core、tfjs-layers、tfjs-node和tfjs-converter等。
全书共8章,第1章主要介绍深度学习相关的数学知识、概念及架构;第2章介绍在深度学习应用中常用的深度学习架构;第3章介绍用在浏览器上的三种不同JavaScript深度学习框架,即TensorFlow.js、WebDNN和Keras.js;第4章介绍在浏览器和Node.js中运行深度学习框架的JavaScript基础;第5章介绍如何将深度学习操作映射到GPU,并展示如何用WebGL实现神经网络;第6章介绍如何从浏览器提取数据,如从URL加载图片数据、从网络摄像头解析帧数据,或者从手机解析数据;第7章给出一些在浏览器中操作数据的实用方法;第8章通过一些小项目详细阐释TensorFlow.js实践细节。
译者序
前言
第 1 章 深度学习. . . . . . . . . . . . . . . . . . . . . . .1
1.1 深度神经网络的数学基础 . . . . 1
1.1.1 感知机||门控线性回归 . . . . 2
1.1.2 多层感知机. . . . . . . . . . . . . . . . .5
1.1.3 卷积和池化. . . . . . . . . . . . . . . . .5
1.1.4 激活函数 . . . . . . . . . . . . . . . . . . . 7
1.2 深度神经网络的训练. . . . . . . .11
1.2.1 损失函数的重要性 . . . . . . . . . 12
1.2.2 正则化 . . . . . . . . . . . . . . . . . . . .12
1.2.3 反向传播算法 . . . . . . . . . . . . . 13
1.2.4 优化方法. . . . . . . . . . . . . . . . . .13
1.3 本章小结. . . . . . . . . . . . . . . . . . . .14
第 2 章 神经网络架构. . . . . . . . . . . . . . . . .15
2.1 卷积神经网络 . . . . . . . . . . . . . . . 15
2.1.1 AlexNet . . . . . . . . . . . . . . . . . . 16
2.1.2 GoogLeNet. . . . . . . . . . . . . . . .17
2.1.3 ResNet . . . . . . . . . . . . . . . . . . . 18
2.1.4 SqueezeNet . . . . . . . . . . . . . . . 19
2.2 循环神经网络 . . . . . . . . . . . . . . . 22
2.2.1 LSTM . . . . . . . . . . . . . . . . . . . 23
2.2.2 GRU . . . . . . . . . . . . . . . . . . . . .24
2.3 深度强化学习 . . . . . . . . . . . . . . . 25
2.4 本章小结. . . . . . . . . . . . . . . . . . . .28
第 3 章 JavaScript 深度学习框架 . . . . 29
3.1 TensorFlow.js . . . . . . . . . . . . . . .29
3.1.1 TensorFlow.js 介绍 . . . . . . . . 30
3.1.2 XOR 问题 . . . . . . . . . . . . . . . . 30
3.1.3 解决 XOR 问题 . . . . . . . . . . . 32
3.1.4 网络架构. . . . . . . . . . . . . . . . . .37
3.1.5 张量 . . . . . . . . . . . . . . . . . . . . . . 39
3.1.6 张量操作. . . . . . . . . . . . . . . . . .40
3.1.7 模型训练. . . . . . . . . . . . . . . . . .43
3.1.8 TensorFlow.js 的生态 . . . . . . 46
3.2 WebDNN . . . . . . . . . . . . . . . . . . . 48
3.3 Keras.js . . . . . . . . . . . . . . . . . . . . 51
3.4 本章小结. . . . . . . . . . . . . . . . . . . .52
第 4 章 深度学习的 JavaScript 基础 . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1 JavaScript 中的TypedArray . . . . . . . . . . . . . . . . 53
4.1.1 ArrayBu.er . . . . . . . . . . . . . . 55
4.1.2 DataView . . . . . . . . . . . . . . . . 56
4.2 JavaScript 中的并发 . . . . . . . . 58
4.2.1 JavaScript 的事件循环 . . . . . 58
4.2.2 用 Promise 创建一个异步函数 . . . . . . . . . . . . . . . . . .59
4.2.3 使用新的async/await语法 . . . . . . . . . . . . . . . . . . . . . . 61
4.2.4 多线程使用 WebWorker . . . 64
4.2.5 深度学习应用程序的处理循环 . . . . . . . . . . . . . . . . . .66
4.3 在 CPU/GPU 上加载资源 . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.1 Fetch API . . . . . . . . . . . . . . . . 67
4.3.2 标签编码. . . . . . . . . . . . . . . . . .69
4.3.3 one-hot 编码 . . . . . . . . . . . . . . 69
4.4 本章小结. . . . . . . . . . . . . . . . . . . .70
第 5 章 基于 WebGL 的 GPU加速 . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.1 WebGL 基础 . . . . . . . . . . . . . . . . 74
5.1.1 WebGL 工作流程 . . . . . . . . . . 76
5.1.2 片段着色器渲染 . . . . . . . . . . . 78
5.2 WebGL 实现常规计算 . . . . . . 85
5.2.1 调试 WebGL . . . . . . . . . . . . . 86
5.2.2 渲染纹理. . . . . . . . . . . . . . . . . .87
5.2.3 精度重要性. . . . . . . . . . . . . . . .92
5.2.4 优化器 . . . . . . . . . . . . . . . . . . . .94
5.2.5 GLSL 开发. . . . . . . . . . . . . . . .95
5.2.6 浮点型的特殊性 . . . . . . . . . . . 95
5.2.7 从 CPU 流向 GPU,反之亦然 . . . . . . . . . . . . . . . . . .99
5.3 使用纹理和着色器的矩阵计算 . . . . . . . . . . . . . . . . . . 101
5.3.1 标准的矩阵加法 . . . . . . . . . . 101
5.3.2 标准的矩阵乘法 . . . . . . . . . . 102
5.3.3 激活函数应用 . . . . . . . . . . . . 103
5.3.4 运用WGLMatrix库 . . . . . . . . . 104
5.4 手写数字识别应用 . . . . . . . . . 105
5.4.1 数据编码 . . . . . . . . . . . . . . . . 105
5.4.2 内存优化 . . . . . . . . . . . . . . . . 105
5.4.3 前向传播 . . . . . . . . . . . . . . . . 107
5.4.4 第一次尝试 . . . . . . . . . . . . . . 107
5.4.5 优化性能 . . . . . . . . . . . . . . . . 108
5.5 本章小结 . . . . . . . . . . . . . . . . . . 109
第 6 章 从浏览器中提取数据 . . . . . . . . 111
6.1 加载图像数据. . . . . . . . . . . . . .112
6.1.1 从图像中提取像素 . . . . . . . . 112
6.1.2 加载远程资源 . . . . . . . . . . . . 114
6.1.3 获取二进制块 . . . . . . . . . . . . 116
6.2 将像素数据渲染到屏幕上 . . 117
6.2.1 显示图片 . . . . . . . . . . . . . . . . 118
6.2.2 将像素数据渲染到画布 . . . . 119
6.2.3 插值图像数据 . . . . . . . . . . . . 122
6.2.4 在画布上绘制形状 . . . . . . . . 124
6.3 访问相机、麦克风和扬声器. . . . . . . . . . . . . . . . . . . . .126
6.3.1 从网络摄像头捕获图像 . . . . 126
6.3.2 用麦克风录音 . . . . . . . . . . . . 128
6.3.3 加载、解码和播放声音 . . . . 130
6.4 深度学习框架中的实用工具. . . . . . . . . . . . . . . . . . .131
6.4.1 TensorFlow.js . . . . . . . . . . . 131
6.4.2 Keras.js . . . . . . . . . . . . . . . . . 133
6.4.3 WebDNN . . . . . . . . . . . . . . . 133
6.5 本章小结 . . . . . . . . . . . . . . . . . . 135
第 7 章 高级数据操作的方法 . . . . . . . . 137
7.1 反序列化 Protobuf . . . . . . . . 138
7.1.1 解析 Caffe 模型参数 . . . . . . 139
7.1.2 解析 TensorFlow 图. . . . . . .141
7.1.3 浮点精度的注意事项 . . . . . . 142
7.2 用 Chart.js 绘制图表. . . . . . .143
7.2.1 探索不同的图表类型 . . . . . . 144
7.2.2 配置数据集 . . . . . . . . . . . . . . 146
7.2.3 更新值. . . . . . . . . . . . . . . . . . .147
7.2.4 选项和配置概述 . . . . . . . . . . 150
7.3 用画布画草图. . . . . . . . . . . . . .153
7.3.1 在画布上绘图 . . . . . . . . . . . . 154
7.3.2 提取笔画 . . . . . . . . . . . . . . . . 158
7.4 从麦克风计算频谱图. . . . . . .159
7.5 人脸检测与跟踪 . . . . . . . . . . . 162
7.5.1 用 Jeeliz FaceFilter跟踪人脸. . . . . . . . . . . . . . . . .162
7.5.2 使用 tracking.js 跟踪人脸 . . . . . . . . . . . . . . . . . . . . . 163
7.5.3 Chrome 中人脸检测的原生支持. . . . . . . . . . . . . . . . .165
7.6 本章小结 . . . . . . . . . . . . . . . . . . 167
第 8 章 基于 TensorFlow.js构建应用 . . . . . . . . . . . . . . . . . . . . 169
8.1 TensorFlow.js 实现手势识别. . . . . . . . . . . . . . . . . . .169
8.1.1 算法解说 . . . . . . . . . . . . . . . . 170
8.1.2 TensorFlow.js 项目准备 . . . 171
8.1.3 实例化 KNN 图像分类器 . . . . . . . . . . . . . . . . . . . . . 172
8.1.4 TensorFlow.js 迭代训练 . . . 173
8.1.5 小结. . . . . . . . . . . . . . . . . . . . .176
8.2 TensorFlow.js 实现文本生成 . . . . . . . . . . . . . . . . . . . . . . . 176
8.2.1 算法解说 . . . . . . . . . . . . . . . . 176
8.2.2 Keras 模型 . . . . . . . . . . . . . . .177
8.2.3 将 Keras 模型转换为TensorFlow.js 模型 . . . . . . . 178
8.2.4 项目准备 . . . . . . . . . . . . . . . . 178
8.2.5 在 TensorFlow.js 中导入Keras 模型 . . . . . . . . . . . . . . 179
8.2.6 TensorFlow.js 迭代训练 . . . 179
8.2.7 构造模型输入 . . . . . . . . . . . . 181
8.2.8 模型预测 . . . . . . . . . . . . . . . . 183
8.2.9 模型输出抽样 . . . . . . . . . . . . 184
8.2.10 小结. . . . . . . . . . . . . . . . . . . .186
8.3 TensorFlow.js 实现图像降噪. . . . . . . . . . . . . . . . . . .186
8.3.1 算法解说 . . . . . . . . . . . . . . . . 187
8.3.2 将 Keras 模型转换为TensorFlow.js 模型 . . . . . . . 188
8.3.3 项目准备 . . . . . . . . . . . . . . . . 189
8.3.4 初始化. . . . . . . . . . . . . . . . . . .190
8.3.5 应用流程 . . . . . . . . . . . . . . . . 190
8.3.6 加载测试数字图片 . . . . . . . . 191
8.3.7 更新噪声 . . . . . . . . . . . . . . . . 193
8.3.8 生成变形图片 . . . . . . . . . . . . 194
8.3.9 图片降噪 . . . . . . . . . . . . . . . . 195
8.3.10 初始化函数 . . . . . . . . . . . . . 196
8.3.11 小结. . . . . . . . . . . . . . . . . . . .197
8.4 本章小结 . . . . . . . . . . . . . . . . . . 197
8.5 最后结论 . . . . . . . . . . . . . . . . . . 198
温馨提示:请使用员工书屋的读者帐号和密码进行登录