JavaScript 深度學習 (Deep Learning with JavaScript: Neural Networks in Tensorflow.Js)

Shanqing Cai,Stanley Bileschi,Eric D. Nielsen,Fran?ois Chollet 程泽

  • JavaScript 深度學習 (Deep Learning with JavaScript: Neural Networks in Tensorflow.Js)-preview-1
  • JavaScript 深度學習 (Deep Learning with JavaScript: Neural Networks in Tensorflow.Js)-preview-2
JavaScript 深度學習 (Deep Learning with JavaScript: Neural Networks in Tensorflow.Js)-preview-1

買這商品的人也買了...

商品描述

本書教你使用TensorFlow.js構建強大的JavaScript深度學習應用程序。本書作者均是谷歌大腦團隊的資深工程師,也是TensorFlow.js的核心開發人員。你將瞭解JavaScript與深度學習結合的獨特優勢,掌握客戶端預測與分析、圖像識別、監督學習、遷移學習、強化學習等核心概念,並動手在瀏覽器中實現電腦視覺和音頻處理以及自然語言處理,構建並訓練神經網絡,利用客戶端數據優化機器學習模型,開發基於瀏覽器的交互式游戲,同時為深度學習探索新的應用空間。你還可以獲得深度學習模型構建過程中不同問題所涉及的策略和相關限制的實用知識,同時瞭解訓練和部署這些模型的具體步驟以及重要的註意事項。

作者簡介

蔡善清(Shanqing Cai)
谷歌公司軟件工程師,深度參與了TensorFlow和TensorFlow.js的開發工作。
從清華大學畢業後,他前往約翰斯·霍普金斯大學和麻省理工學院深造,並取得了麻省理工學院博士學位。


斯坦利·比列斯奇(Stanley Bileschi)
谷歌公司TensorFlow可用性團隊技術負責人,領導團隊構建了TensorFlow.js高階API。


埃里克·D.尼爾森(Eric D. Nielsen)
谷歌公司軟件工程師,深度參與了TensorFlow.js的開發工作。


弗朗索瓦·肖萊(Fran?ois Chollet)
Keras之父,TensorFlow機器學習框架貢獻者,Kaggle競賽教練,目前任職於谷歌公司,從事人工智能研究,另著有《Python深度學習》。

【譯者簡介】

程澤
軟件工程師,先後任職於AMD、IBM、ThoughtWorks等企業,對機器學習在設備端的蓬勃發展充滿期待。

目錄大綱

第一部分動機和基本概念

第1章深度學習和JavaScript 2
1.1人工智能、機器學習、神經網絡和深度學習4
1.1.1人工智能4
1.1.2機器學習:它和傳統編程有何不同5
1.1.3神經網絡和深度學習9
1.1.4進行深度學習的必要性12
1.2為何要結合JavaScript和機器學習14
1.2.1用Node.js進行深度學習19
1.2.2 JavaScript生態系統20
1.3為何選用TensorFlow.js 21
1.3.1 TensorFlow、Keras和TensorFlow.js的前世今生21
1.3.2為何選用TensorFlow.js 24
1.3.3 TensorFlow.js在全球的應用情況25
1.3.4本書中的TensorFlow.js知識26
1.4練習27
1.5小結27

第二部分深入淺出TensorFlow.js

第2章TensorFlow.js入門:從簡單的線性回歸開始30
2.1示例1:用TensorFlow.js預測下載任務所需時間30
2.1.1項目概覽:預測下載任務所需時間31
2.1.2關於代碼清單和控制台交互的注意事項32
2.1.3創建和格式化數據32
2.1.4定義簡單的模型35
2.1.5使模型擬合訓練集37
2.1.6用經過訓練的模型進行預測39
2.1.7示例1小結40
2.2 model.fit()內部原理剖析:示例1中的梯度下降算法41
2.2.1直觀理解梯度下降算法優化41
2.2.2探索梯度下降算法的內部原理:反向傳播算法46
2.3示例2 :涉及多個輸入特徵的線性回歸50
2.3.1波士頓房價數據集50
2.3.2從GitHub獲取並運行波士頓房價預測項目51
2.3.3讀取波士頓房價數據53
2.3. 4準確定義波士頓房價問題54
2.3.5線性回歸前的準備工作:數據標準化55
2.3.6對波士頓房價數據集進行線性回歸59
2.4如何理解模型62
2.4.1解釋習得的權重62
2.4.2獲取模型內部權重64
2.4.3關於可解釋性的注意事項65
2.5練習65
2.6小結65

第3章添加非線性:升級加權和67
3. 1非線性的定義及其優勢67
3.1.1直觀地理解神經網絡中的非線性69
3.1.2超參數與超參數優化75
3.2輸出端的非線性:分類任務的模型77
3.2.1二分類定義78
3.2.2度量二分類器的性能:準確率、精確率、召回率81
3.2.3 ROC曲線:展示二分類問題中的取捨關係83
3.2 .4二元交叉熵:二分類問題的損失函數87
3.3多分類問題90
3.3.1對分類數據進行one-hot編碼90
3.3.2歸一化指數函數:softmax函數92
3 .3.3分類交叉熵:多分類問題的損失函數94
3.3.4混淆矩陣:更細粒度地分析多分類問題95
3.4練習97
3.5小結98

第4章用convnet識別圖像和音頻99
4.1從向量到張量:圖像數據的表示方法99
4.2你的第一個convnet 101
4.2.1 conv2d層103
4.2.2 maxPooling2d層107
4.2.3重複出現的捲積層加池化層組合模式108
4.2.4扁平化密集層109
4.2.5訓練convnet 111
4.2.6用convnet做預測114
4.3告別瀏覽器:用Node.js更快地訓練模型117
4.3.1安裝使用tfjs-node所需的依賴和模塊117
4.3.2在瀏覽器中加載Node.js中保存的模型122
4.4口語單詞識別:對音頻數據使用convnet 124
4.5練習130
4.6小結130

第5章遷移學習:復用預訓練的神經網絡132
5.1遷移學習簡介:復用預訓練模型132
5.1.1基於兼容的輸出形狀進行遷移學習:固化層134
5.1.2對不兼容的輸出形狀進行遷移學習:用基模型的輸出創建新模型139
5.1.3用微調最大化遷移學習的收益:音頻示例150
5.2通過對convnet進行遷移學習實現目標檢測159
5.2.1基於合成場景的簡單目標識別問題160
5.2.2深入了解如何實現簡單的目標檢測161
5 .3練習168
5.4小結169

第三部分TensorFlow.js高級深度學習

第6章處理數據172
6.1用tf.data管理數據173
6.1.1 tf.data.Dataset對象173
6.1.2創建tf.data.Dataset對象174
6.1.3讀取數據集對像中的數據178
6.1.4操作tfjs-data數據集179
6.2用model.fitDataset訓練模型183
6.3獲取數據的常見模式188
6.3.1處理CSV格式的數據188
6.3.2用tf.data.webcam()獲取視頻數據193
6.3.3用tf.data.microphone()獲取音頻數據196
6.4處理有缺陷的數據198
6.4.1數據理論199
6.4.2檢測並清洗數據中的缺陷202
6.5數據增強208
6.6練習211
6. 7小結211

第7章可視化數據和模型212
7.1數據可視化212
7.1.1用tfjs-vis模塊可視化數據213
7.1.2綜合性案例研究:用tfjs-vis模塊可視化氣象數據220
7 .2可視化訓練後的模型225
7.2.1可視化convnet內部激活函數的輸出226
7.2.2找到卷積層的敏感點:最大化激活函數輸出的輸入圖像229
7.2.3可視化和解讀convnet的分類結果233
7.3延展閱讀和補充資料234
7.4練習235
7.5小結235

第8章欠擬合、過擬合,以及機器學習的通用流程236
8.1定義氣溫預測問題236
8.2欠擬合、過擬合,以及應對措施240
8.2.1欠擬合240
8.2.2過擬合242
8.2.3用權重正則化應對過擬合併可視化其成效244
8.3機器學習的通用流程248
8.4練習250
8.5小結251

第9章針對序列和文本的深度學習252
9.1用RNN對氣溫預測問題進行第二次嘗試253
9.1.1為何密集層無法為序列中的順序信息建模253
9.1.2 RNN層如何為序列中的順序建模255
9.2構建針對文本的深度學習模型263
9.2.1文本在機器學習中的表示方法:one-hot編碼和multi-hot編碼264
9.2.2對情感分析問題的第一次嘗試266
9.2.3一種更高效的文本表示:詞嵌入267
9.2.4 1D convnet 269
9.3採用注意力機制的序列到序列任務277
9.3.1定義序列到序列任務277
9.3.2編碼器解碼器架構和注意力機制279
9.3.3詳解基於注意力機制的編碼器解碼器模型282
9.4延展閱讀286
9.5練習286
9.6小結287

第10章生成式深度學習289
10.1用LSTM生成文本290
10.1.1下個字符預測器:一種簡單的文本生成方法290
10.1.2基於LSTM的文本生成器示例292
10.1.3混沌值:調節生成文本的隨機程度的閥門296
10.2變分自編碼器:找到圖像的高效、結構化表示299
10.2.1經典自編碼器和變分自編碼器:基本概念299
10.2.2 VAE的具體示例:Fashion-MNIST數據集示例302
10.3用GAN生成圖像308
10.3.1 GAN背後的基本概念309
10.3.2 ACGAN的基本組成部分311
10.3.3詳解ACGAN的訓練流程315
10.3.4見證針對MNIST數據集的ACGAN模型的訓練和圖像生成317
10.4延展閱讀320
10.5練習320
10.6小結321

第11章深度強化學習的基本原理322
11.1定義強化學習問題323
11. 2策略網絡和策略梯度:平衡倒立擺示例326
11.2.1用強化學習的框架定義平衡倒立擺問題326
11.2.2策略網絡328
11.2.3訓練策略網絡:REINFORCE算法331
11. 3價值網絡和Q學習:《貪吃蛇》遊戲示例337
11.3.1用強化學習的框架定義貪吃蛇問題337
11.3.2馬爾可夫決策過程和Q值340
11.3.3深度Q網絡343
11.3.4訓練深度Q網絡346
11.4延展閱讀356
11.5練習356
11.6小結358

第四部分總結與結語

第12章模型的測試、優化和部署360
12.1測試TensorFlow.js模型360
12.1.1傳統的單元測試362
12.1.2基於黃金值的測試364
12.1.3關於持續訓練的一些思考366
12.2模型優化367
12.2.1通過訓練後的權重量化優化模型體積367
12.2.2基於GraphModel轉換的推斷速度優化373
12.3部署TensorFlow.js模型到不同的平台和環境378
12.3.1部署到Web環境時的一些額外考量378
12.3.2部署到雲環境379
12.3.3部署到瀏覽器插件(例如Chrome插件)環境380
12.3.4部署到基於JavaScript的移動端應用程序382
12.3.5部署到基於JavaScript的跨平台桌面端應用程序383
12.3.6部署到微信和其他基於JavaScript的移動端插件系統385
12.3.7部署到單片機386
12.3.8部署環境的總結388
12.4延展閱讀388
12.5練習388
12.6小結389

第13章總結與展望390
13.1回顧關鍵概念390
13.1.1 AI的各種策略390
13.1.2深度學習從各種機器學習策略中脫穎而出的原因391
13.1.3如何抽像地理解深度學習392
13.1.4深度學習成功的關鍵因素392
13.1.5 JavaScript深度學習帶來的新應用和新機遇393
13.2回顧深度學習的流程和TensorFlow.js中的算法394
13.2.1監督式深度學習的通用流程394
13.2.2回顧TensorFlow.js中的模型類型和層類型395
13.2.3在TensorFlow.js中使用預訓練模型400
13.2.4可能性空間402
13.2.5深度學習的局限性404
13.3深度學習的發展趨勢406
13.4繼續探索的一些指引407
13.4.1在Kaggle上練習解決實際的機器學習問題407
13.4.2了解arXiv上的最新進展408
13.4.3探索TensorFlow.js生態408
13.5寄語408

附錄A安裝tfjs-node-gpu及其依賴(圖靈社區下載)
附錄B TensorFlow.js張量及運算的簡明教程(圖靈社區下載)
術語表(圖靈社區下載)