基於瀏覽器的深度學習

基於瀏覽器的深度學習

《基於瀏覽器的深度學習》是2019年機械工業出版社出版的圖書,作者是[法] 澤維爾·布里(Xavier Bourry)。

基本介紹

  • 書名:基於瀏覽器的深度學習
  • 作者:[法] 澤維爾·布里(Xavier Bourry)
  • 出版社:機械工業出版社
  • ISBN:9787111629405
內容簡介,圖書目錄,

內容簡介

本書是一本在瀏覽器中進行深度學習套用的入門實踐指南,主要內容櫃歡包括神經網路架構、主流的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
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

相關詞條

熱門詞條

聯絡我們