基於瀏覽器的深度學習 | 運動資訊第一站 - 2024年7月

基於瀏覽器的深度學習

作者:(法)澤維爾·布里
出版社:機械工業
出版日期:2019年08月01日
ISBN:9787111629405
語言:繁體中文
售價:374元

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


賽維爾·布里(Xavier Bourry)是創業公司Jeeliz的聯合創始人和CTO,專注於深度學習。他使用WebGLAPI開發了基於GPU的深度學習引擎,其性能比tfjs高,能夠用於即時視頻處理。


佐佐木凱(Ka iSasaki)是Arm公司的高級軟體工程師,還是Apache Hivemall Committer。他擅長Web和資料處理平臺,在使用APNS與GCM開發和維護通知平臺、開發Hadoop和Storm等資料處理平臺、開發/維護Presto集群等方面有豐富的經驗。
  
克裡斯托夫·科納(Christoph Korner)是微軟公司大資料和人工智慧專家,之前是T-Mobile Austria的大資料技術主管、Kaggle Vienna機器學習社區的會議組織者。除本書外,他還著有《Learning Responsive Data Visualization》《Data Visualization with D3 and AngularjS》等。
  
中野禮·郎(Reiichiro Nakano)是Infostellar公司的軟體發展工程師,專注於機器學習。

譯者序
前言
第 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


相關書籍