本書教你使用TensorFlow.js構(gòu)建強(qiáng)大的JavaScript深度學(xué)習(xí)應(yīng)用程序。本書作者均是谷歌大腦團(tuán)隊的資深工程師,也是TensorFlow.js的核心開發(fā)人員。你將了解JavaScript與深度學(xué)習(xí)結(jié)合的獨(dú)特優(yōu)勢,掌握客戶端預(yù)測與分析、圖像識別、監(jiān)督學(xué)習(xí)、遷移學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等核心概念,并動手在瀏覽器中實(shí)現(xiàn)計算機(jī)視覺和音頻處理以及自然語言處理,構(gòu)建并訓(xùn)練神經(jīng)網(wǎng)絡(luò),利用客戶端數(shù)據(jù)優(yōu)化機(jī)器學(xué)習(xí)模型,開發(fā)基于瀏覽器的交互式游戲,同時為深度學(xué)習(xí)探索新的應(yīng)用空間。你還可以獲得深度學(xué)習(xí)模型構(gòu)建過程中不同問題所涉及的策略和相關(guān)限制的實(shí)用知識,同時了解訓(xùn)練和部署這些模型的具體步驟以及重要的注意事項。
1.深度學(xué)習(xí)扛鼎之作《Python深度學(xué)習(xí)》姊妹篇;
2.谷歌大腦團(tuán)隊核心開發(fā)人員官方解讀TensorFlow.js;
3.前端工程師不可錯過的AI入門書。
蔡善清(Shanqing Cai)
谷歌公司軟件工程師,深度參與了TensorFlow和TensorFlow.js的開發(fā)工作。從清華大學(xué)畢業(yè)后,他前往約翰斯·霍普金斯大學(xué)和麻省理工學(xué)院深造,并取得了麻省理工學(xué)院博士學(xué)位。
斯坦利·比列斯奇(Stanley Bileschi)
谷歌公司TensorFlow可用性團(tuán)隊技術(shù)負(fù)責(zé)人,領(lǐng)導(dǎo)團(tuán)隊構(gòu)建了TensorFlow.js高階API。
埃里克·D. 尼爾森(Eric D. Nielsen)
谷歌公司軟件工程師,深度參與了TensorFlow.js的開發(fā)工作。
弗朗索瓦·肖萊(Fran?ois Chollet)
Keras之父,TensorFlow機(jī)器學(xué)習(xí)框架貢獻(xiàn)者,Kaggle競賽教練,目前任職于谷歌公司,從事人工智能研究,另著有《Python深度學(xué)習(xí)》。
【譯者簡介】
程澤
軟件工程師,先后任職于AMD、IBM、ThoughtWorks等企業(yè),對機(jī)器學(xué)習(xí)在設(shè)備端的蓬勃發(fā)展充滿期待。
第 一部分 動機(jī)和基本概念
第 1章 深度學(xué)習(xí)和JavaScript 2
1.1 人工智能、機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí) 4
1.1.1 人工智能 4
1.1.2 機(jī)器學(xué)習(xí):它和傳統(tǒng)編程有何不同 5
1.1.3 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí) 9
1.1.4 進(jìn)行深度學(xué)習(xí)的必要性 12
1.2 為何要結(jié)合JavaScript和機(jī)器學(xué)習(xí) 14
1.2.1 用Node.js進(jìn)行深度學(xué)習(xí) 19
1.2.2 JavaScript生態(tài)系統(tǒng) 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在全球的應(yīng)用情況 25
1.3.4 本書中的TensorFlow.js知識 26
1.4 練習(xí) 27
1.5 小結(jié) 27
第二部分 深入淺出TensorFlow.js
第 2章 TensorFlow.js入門:從簡單的線性回歸開始 30
2.1 示例1:用TensorFlow.js預(yù)測下載任務(wù)所需時間 30
2.1.1 項目概覽:預(yù)測下載任務(wù)所需時間 31
2.1.2 關(guān)于代碼清單和控制臺交互的注意事項 32
2.1.3 創(chuàng)建和格式化數(shù)據(jù) 32
2.1.4 定義簡單的模型 35
2.1.5 使模型擬合訓(xùn)練集 37
2.1.6 用經(jīng)過訓(xùn)練的模型進(jìn)行預(yù)測 39
2.1.7 示例1 小結(jié) 40
2.2 model.fit()內(nèi)部原理剖析:示例1中的梯度下降算法 41
2.2.1 直觀理解梯度下降算法優(yōu)化 41
2.2.2 探索梯度下降算法的內(nèi)部原理:反向傳播算法 46
2.3 示例2:涉及多個輸入特征的線性回歸 50
2.3.1 波士頓房價數(shù)據(jù)集 50
2.3.2 從GitHub獲取并運(yùn)行波士頓房價預(yù)測項目 51
2.3.3 讀取波士頓房價數(shù)據(jù) 53
2.3.4 準(zhǔn)確定義波士頓房價問題 54
2.3.5 線性回歸前的準(zhǔn)備工作:數(shù)據(jù)標(biāo)準(zhǔn)化 55
2.3.6 對波士頓房價數(shù)據(jù)集進(jìn)行線性回歸 59
2.4 如何理解模型 62
2.4.1 解釋習(xí)得的權(quán)重 62
2.4.2 獲取模型內(nèi)部權(quán)重 64
2.4.3 關(guān)于可解釋性的注意事項 65
2.5 練習(xí) 65
2.6 小結(jié) 65
第3章 添加非線性:升級加權(quán)和 67
3.1 非線性的定義及其優(yōu)勢 67
3.1.1 直觀地理解神經(jīng)網(wǎng)絡(luò)中的非線性 69
3.1.2 超參數(shù)與超參數(shù)優(yōu)化 75
3.2 輸出端的非線性:分類任務(wù)的模型 77
3.2.1 二分類定義 78
3.2.2 度量二分類器的性能:準(zhǔn)確率、精確率、召回率 81
3.2.3 ROC曲線:展示二分類問題中的取舍關(guān)系 83
3.2.4 二元交叉熵:二分類問題的損失函數(shù) 87
3.3 多分類問題 90
3.3.1 對分類數(shù)據(jù)進(jìn)行one-hot編碼 90
3.3.2 歸一化指數(shù)函數(shù):softmax函數(shù) 92
3.3.3 分類交叉熵:多分類問題的損失函數(shù) 94
3.3.4 混淆矩陣:更細(xì)粒度地分析多分類問題 95
3.4 練習(xí) 97
3.5 小結(jié) 98
第4章 用convnet 識別圖像和音頻 99
4.1 從向量到張量:圖像數(shù)據(jù)的表示方法 99
4.2 你的第 一個convnet 101
4.2.1 conv2d層 103
4.2.2 maxPooling2d層 107
4.2.3 重復(fù)出現(xiàn)的卷積層加池化層組合模式 108
4.2.4 扁平化密集層 109
4.2.5 訓(xùn)練convnet 111
4.2.6 用convnet做預(yù)測 114
4.3 告別瀏覽器:用Node.js更快地訓(xùn)練模型 117
4.3.1 安裝使用tfjs-node所需的依賴和模塊 117
4.3.2 在瀏覽器中加載Node.js中保存的模型 122
4.4 口語單詞識別:對音頻數(shù)據(jù)使用convnet 124
4.5 練習(xí) 130
4.6 小結(jié) 130
第5章 遷移學(xué)習(xí):復(fù)用預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò) 132
5.1 遷移學(xué)習(xí)簡介:復(fù)用預(yù)訓(xùn)練模型 132
5.1.1 基于兼容的輸出形狀進(jìn)行遷移學(xué)習(xí):固化層 134
5.1.2 對不兼容的輸出形狀進(jìn)行遷移學(xué)習(xí):用基模型的輸出創(chuàng)建新模型 139
5.1.3 用微調(diào)最大化遷移學(xué)習(xí)的收益:音頻示例 150
5.2 通過對convnet進(jìn)行遷移學(xué)習(xí)實(shí)現(xiàn)目標(biāo)檢測 159
5.2.1 基于合成場景的簡單目標(biāo)識別問題 160
5.2.2 深入了解如何實(shí)現(xiàn)簡單的目標(biāo)檢測 161
5.3 練習(xí) 168
5.4 小結(jié) 169
第三部分 TensorFlow.js高級深度學(xué)習(xí)
第6章 處理數(shù)據(jù) 172
6.1 用tf.data管理數(shù)據(jù) 173
6.1.1 tf.data.Dataset對象 173
6.1.2 創(chuàng)建tf.data.Dataset對象 174
6.1.3 讀取數(shù)據(jù)集對象中的數(shù)據(jù) 178
6.1.4 操作tfjs-data數(shù)據(jù)集 179
6.2 用model.fitDataset訓(xùn)練模型 183
6.3 獲取數(shù)據(jù)的常見模式 188
6.3.1 處理CSV格式的數(shù)據(jù) 188
6.3.2 用tf.data.webcam()獲取視頻數(shù)據(jù) 193
6.3.3 用tf.data.microphone()獲取音頻數(shù)據(jù) 196
6.4 處理有缺陷的數(shù)據(jù) 198
6.4.1 數(shù)據(jù)理論 199
6.4.2 檢測并清洗數(shù)據(jù)中的缺陷 202
6.5 數(shù)據(jù)增強(qiáng) 208
6.6 練習(xí) 211
6.7 小結(jié) 211
第7章 可視化數(shù)據(jù)和模型 212
7.1 數(shù)據(jù)可視化 212
7.1.1 用tfjs-vis模塊可視化數(shù)據(jù) 213
7.1.2 綜合性案例研究:用tfjs-vis模塊可視化氣象數(shù)據(jù) 220
7.2 可視化訓(xùn)練后的模型 225
7.2.1 可視化convnet內(nèi)部激活函數(shù)的輸出 226
7.2.2 找到卷積層的敏感點(diǎn):最大化激活函數(shù)輸出的輸入圖像 229
7.2.3 可視化和解讀convnet的分類結(jié)果 233
7.3 延展閱讀和補(bǔ)充資料 234
7.4 練習(xí) 235
7.5 小結(jié) 235
第8章 欠擬合、過擬合,以及機(jī)器學(xué)習(xí)的通用流程 236
8.1 定義氣溫預(yù)測問題 236
8.2 欠擬合、過擬合,以及應(yīng)對措施 240
8.2.1 欠擬合 240
8.2.2 過擬合 242
8.2.3 用權(quán)重正則化應(yīng)對過擬合并可視化其成效 244
8.3 機(jī)器學(xué)習(xí)的通用流程 248
8.4 練習(xí) 250
8.5 小結(jié) 251
第9章 針對序列和文本的深度學(xué)習(xí) 252
9.1 用RNN對氣溫預(yù)測問題進(jìn)行第二次嘗試 253
9.1.1 為何密集層無法為序列中的順序信息建模 253
9.1.2 RNN層如何為序列中的順序建!255
9.2 構(gòu)建針對文本的深度學(xué)習(xí)模型 263
9.2.1 文本在機(jī)器學(xué)習(xí)中的表示方法:one-hot編碼和multi-hot編碼 264
9.2.2 對情感分析問題的第 一次嘗試 266
9.2.3 一種更高效的文本表示:詞嵌入 267
9.2.4 1D convnet 269
9.3 采用注意力機(jī)制的序列到序列任務(wù) 277
9.3.1 定義序列到序列任務(wù) 277
9.3.2 編碼器 解碼器架構(gòu)和注意力機(jī)制 279
9.3.3 詳解基于注意力機(jī)制的編碼器 解碼器模型 282
9.4 延展閱讀 286
9.5 練習(xí) 286
9.6 小結(jié) 287
第 10章 生成式深度學(xué)習(xí) 289
10.1 用LSTM 生成文本 290
10.1.1 下個字符預(yù)測器:一種簡單的文本生成方法 290
10.1.2 基于LSTM的文本生成器示例 292
10.1.3 混沌值:調(diào)節(jié)生成文本的隨機(jī)程度的閥門 296
10.2 變分自編碼器:找到圖像的高效、結(jié)構(gòu)化表示 299
10.2.1 經(jīng)典自編碼器和變分自編碼器:基本概念 299
10.2.2 VAE的具體示例:Fashion-MNIST數(shù)據(jù)集示例 302
10.3 用GAN生成圖像 308
10.3.1 GAN背后的基本概念 309
10.3.2 ACGAN的基本組成部分 311
10.3.3 詳解ACGAN的訓(xùn)練流程 315
10.3.4 見證針對MNIST數(shù)據(jù)集的ACGAN模型的訓(xùn)練和圖像生成 317
10.4 延展閱讀 320
10.5 練習(xí) 320
10.6 小結(jié) 321
第 11章 深度強(qiáng)化學(xué)習(xí)的基本原理 322
11.1 定義強(qiáng)化學(xué)習(xí)問題 323
11.2 策略網(wǎng)絡(luò)和策略梯度:平衡倒立擺示例 326
11.2.1 用強(qiáng)化學(xué)習(xí)的框架定義平衡倒立擺問題 326
11.2.2 策略網(wǎng)絡(luò) 328
11.2.3 訓(xùn)練策略網(wǎng)絡(luò):REINFORCE算法 331
11.3 價值網(wǎng)絡(luò)和Q學(xué)習(xí):《貪吃蛇》游戲示例 337
11.3.1 用強(qiáng)化學(xué)習(xí)的框架定義貪吃蛇問題 337
11.3.2 馬爾可夫決策過程和Q值 340
11.3.3 深度Q網(wǎng)絡(luò) 343
11.3.4 訓(xùn)練深度Q網(wǎng)絡(luò) 346
11.4 延展閱讀 356
11.5 練習(xí) 356
11.6 小結(jié) 358
第四部分 總結(jié)與結(jié)語
第 12章 模型的測試、優(yōu)化和部署 360
12.1 測試TensorFlow.js模型 360
12.1.1 傳統(tǒng)的單元測試 362
12.1.2 基于黃金值的測試 364
12.1.3 關(guān)于持續(xù)訓(xùn)練的一些思考 366
12.2 模型優(yōu)化 367
12.2.1 通過訓(xùn)練后的權(quán)重量化優(yōu)化模型體積 367
12.2.2 基于GraphModel轉(zhuǎn)換的推斷速度優(yōu)化 373
12.3 部署TensorFlow.js模型到不同的平臺和環(huán)境 378
12.3.1 部署到Web環(huán)境時的一些額外考量 378
12.3.2 部署到云環(huán)境 379
12.3.3 部署到瀏覽器插件(例如Chrome插件)環(huán)境 380
12.3.4 部署到基于JavaScript的移動端應(yīng)用程序 382
12.3.5 部署到基于JavaScript的跨平臺桌面端應(yīng)用程序 383
12.3.6 部署到微信和其他基于JavaScript的移動端插件系統(tǒng) 385
12.3.7 部署到單片機(jī) 386
12.3.8 部署環(huán)境的總結(jié) 388
12.4 延展閱讀 388
12.5 練習(xí) 388
12.6 小結(jié) 389
第 13章 總結(jié)與展望 390
13.1 回顧關(guān)鍵概念 390
13.1.1 AI的各種策略 390
13.1.2 深度學(xué)習(xí)從各種機(jī)器學(xué)習(xí)策略中脫穎而出的原因 391
13.1.3 如何抽象地理解深度學(xué)習(xí) 392
13.1.4 深度學(xué)習(xí)成功的關(guān)鍵因素 392
13.1.5 JavaScript深度學(xué)習(xí)帶來的新應(yīng)用和新機(jī)遇 393
13.2 回顧深度學(xué)習(xí)的流程和TensorFlow.js中的算法 394
13.2.1 監(jiān)督式深度學(xué)習(xí)的通用流程 394
13.2.2 回顧TensorFlow.js中的模型類型和層類型 395
13.2.3 在TensorFlow.js中使用預(yù)訓(xùn)練模型 400
13.2.4 可能性空間 402
13.2.5 深度學(xué)習(xí)的局限性 404
13.3 深度學(xué)習(xí)的發(fā)展趨勢 406
13.4 繼續(xù)探索的一些指引 407
13.4.1 在Kaggle上練習(xí)解決實(shí)際的機(jī)器學(xué)習(xí)問題 407
13.4.2 了解arXiv上的最新進(jìn)展 408
13.4.3 探索TensorFlow.js生態(tài) 408
13.5 寄語 408
附錄A 安裝tfjs-node-gpu及其依賴(圖靈社區(qū)下載)
附錄B TensorFlow.js張量及運(yùn)算的簡明教程(圖靈社區(qū)下載)
術(shù)語表(圖靈社區(qū)下載)