本書(shū)教你使用TensorFlow.js構(gòu)建強(qiáng)大的JavaScript深度學(xué)習(xí)應(yīng)用程序。本書(shū)作者均是谷歌大腦團(tuán)隊(duì)的資深工程師,也是TensorFlow.js的核心開(kāi)發(fā)人員。你將了解JavaScript與深度學(xué)習(xí)結(jié)合的獨(dú)特優(yōu)勢(shì),掌握客戶(hù)端預(yù)測(cè)與分析、圖像識(shí)別、監(jiān)督學(xué)習(xí)、遷移學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等核心概念,并動(dòng)手在瀏覽器中實(shí)現(xiàn)計(jì)算機(jī)視覺(jué)和音頻處理以及自然語(yǔ)言處理,構(gòu)建并訓(xùn)練神經(jīng)網(wǎng)絡(luò),利用客戶(hù)端數(shù)據(jù)優(yōu)化機(jī)器學(xué)習(xí)模型,開(kāi)發(fā)基于瀏覽器的交互式游戲,同時(shí)為深度學(xué)習(xí)探索新的應(yīng)用空間。你還可以獲得深度學(xué)習(xí)模型構(gòu)建過(guò)程中不同問(wèn)題所涉及的策略和相關(guān)限制的實(shí)用知識(shí),同時(shí)了解訓(xùn)練和部署這些模型的具體步驟以及重要的注意事項(xiàng)。
1.深度學(xué)習(xí)扛鼎之作《Python深度學(xué)習(xí)》姊妹篇;
2.谷歌大腦團(tuán)隊(duì)核心開(kāi)發(fā)人員官方解讀TensorFlow.js;
3.前端工程師不可錯(cuò)過(guò)的AI入門(mén)書(shū)。
蔡善清(Shanqing Cai)
谷歌公司軟件工程師,深度參與了TensorFlow和TensorFlow.js的開(kāi)發(fā)工作。從清華大學(xué)畢業(yè)后,他前往約翰斯·霍普金斯大學(xué)和麻省理工學(xué)院深造,并取得了麻省理工學(xué)院博士學(xué)位。
斯坦利·比列斯奇(Stanley Bileschi)
谷歌公司TensorFlow可用性團(tuán)隊(duì)技術(shù)負(fù)責(zé)人,領(lǐng)導(dǎo)團(tuán)隊(duì)構(gòu)建了TensorFlow.js高階API。
埃里克·D. 尼爾森(Eric D. Nielsen)
谷歌公司軟件工程師,深度參與了TensorFlow.js的開(kāi)發(fā)工作。
弗朗索瓦·肖萊(Fran?ois Chollet)
Keras之父,TensorFlow機(jī)器學(xué)習(xí)框架貢獻(xiàn)者,Kaggle競(jìng)賽教練,目前任職于谷歌公司,從事人工智能研究,另著有《Python深度學(xué)習(xí)》。
【譯者簡(jiǎn)介】
程澤
軟件工程師,先后任職于AMD、IBM、ThoughtWorks等企業(yè),對(duì)機(jī)器學(xué)習(xí)在設(shè)備端的蓬勃發(fā)展充滿(mǎn)期待。
第 一部分 動(dòng)機(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 本書(shū)中的TensorFlow.js知識(shí) 26
1.4 練習(xí) 27
1.5 小結(jié) 27
第二部分 深入淺出TensorFlow.js
第 2章 TensorFlow.js入門(mén):從簡(jiǎn)單的線(xiàn)性回歸開(kāi)始 30
2.1 示例1:用TensorFlow.js預(yù)測(cè)下載任務(wù)所需時(shí)間 30
2.1.1 項(xiàng)目概覽:預(yù)測(cè)下載任務(wù)所需時(shí)間 31
2.1.2 關(guān)于代碼清單和控制臺(tái)交互的注意事項(xiàng) 32
2.1.3 創(chuàng)建和格式化數(shù)據(jù) 32
2.1.4 定義簡(jiǎn)單的模型 35
2.1.5 使模型擬合訓(xùn)練集 37
2.1.6 用經(jīng)過(guò)訓(xùn)練的模型進(jìn)行預(yù)測(cè) 39
2.1.7 示例1 小結(jié) 40
2.2 model.fit()內(nèi)部原理剖析:示例1中的梯度下降算法 41
2.2.1 直觀(guān)理解梯度下降算法優(yōu)化 41
2.2.2 探索梯度下降算法的內(nèi)部原理:反向傳播算法 46
2.3 示例2:涉及多個(gè)輸入特征的線(xiàn)性回歸 50
2.3.1 波士頓房?jī)r(jià)數(shù)據(jù)集 50
2.3.2 從GitHub獲取并運(yùn)行波士頓房?jī)r(jià)預(yù)測(cè)項(xiàng)目 51
2.3.3 讀取波士頓房?jī)r(jià)數(shù)據(jù) 53
2.3.4 準(zhǔn)確定義波士頓房?jī)r(jià)問(wèn)題 54
2.3.5 線(xiàn)性回歸前的準(zhǔn)備工作:數(shù)據(jù)標(biāo)準(zhǔn)化 55
2.3.6 對(duì)波士頓房?jī)r(jià)數(shù)據(jù)集進(jìn)行線(xià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)于可解釋性的注意事項(xiàng) 65
2.5 練習(xí) 65
2.6 小結(jié) 65
第3章 添加非線(xiàn)性:升級(jí)加權(quán)和 67
3.1 非線(xiàn)性的定義及其優(yōu)勢(shì) 67
3.1.1 直觀(guān)地理解神經(jīng)網(wǎng)絡(luò)中的非線(xiàn)性 69
3.1.2 超參數(shù)與超參數(shù)優(yōu)化 75
3.2 輸出端的非線(xiàn)性:分類(lèi)任務(wù)的模型 77
3.2.1 二分類(lèi)定義 78
3.2.2 度量二分類(lèi)器的性能:準(zhǔn)確率、精確率、召回率 81
3.2.3 ROC曲線(xiàn):展示二分類(lèi)問(wèn)題中的取舍關(guān)系 83
3.2.4 二元交叉熵:二分類(lèi)問(wèn)題的損失函數(shù) 87
3.3 多分類(lèi)問(wèn)題 90
3.3.1 對(duì)分類(lèi)數(shù)據(jù)進(jìn)行one-hot編碼 90
3.3.2 歸一化指數(shù)函數(shù):softmax函數(shù) 92
3.3.3 分類(lèi)交叉熵:多分類(lèi)問(wèn)題的損失函數(shù) 94
3.3.4 混淆矩陣:更細(xì)粒度地分析多分類(lèi)問(wèn)題 95
3.4 練習(xí) 97
3.5 小結(jié) 98
第4章 用convnet 識(shí)別圖像和音頻 99
4.1 從向量到張量:圖像數(shù)據(jù)的表示方法 99
4.2 你的第 一個(gè)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ù)測(cè) 114
4.3 告別瀏覽器:用Node.js更快地訓(xùn)練模型 117
4.3.1 安裝使用tfjs-node所需的依賴(lài)和模塊 117
4.3.2 在瀏覽器中加載Node.js中保存的模型 122
4.4 口語(yǔ)單詞識(shí)別:對(duì)音頻數(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í)簡(jiǎn)介:復(fù)用預(yù)訓(xùn)練模型 132
5.1.1 基于兼容的輸出形狀進(jìn)行遷移學(xué)習(xí):固化層 134
5.1.2 對(duì)不兼容的輸出形狀進(jìn)行遷移學(xué)習(xí):用基模型的輸出創(chuàng)建新模型 139
5.1.3 用微調(diào)最大化遷移學(xué)習(xí)的收益:音頻示例 150
5.2 通過(guò)對(duì)convnet進(jìn)行遷移學(xué)習(xí)實(shí)現(xiàn)目標(biāo)檢測(cè) 159
5.2.1 基于合成場(chǎng)景的簡(jiǎn)單目標(biāo)識(shí)別問(wèn)題 160
5.2.2 深入了解如何實(shí)現(xiàn)簡(jiǎn)單的目標(biāo)檢測(cè) 161
5.3 練習(xí) 168
5.4 小結(jié) 169
第三部分 TensorFlow.js高級(jí)深度學(xué)習(xí)
第6章 處理數(shù)據(jù) 172
6.1 用tf.data管理數(shù)據(jù) 173
6.1.1 tf.data.Dataset對(duì)象 173
6.1.2 創(chuàng)建tf.data.Dataset對(duì)象 174
6.1.3 讀取數(shù)據(jù)集對(duì)象中的數(shù)據(jù) 178
6.1.4 操作tfjs-data數(shù)據(jù)集 179
6.2 用model.fitDataset訓(xùn)練模型 183
6.3 獲取數(shù)據(jù)的常見(jiàn)模式 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 檢測(cè)并清洗數(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的分類(lèi)結(jié)果 233
7.3 延展閱讀和補(bǔ)充資料 234
7.4 練習(xí) 235
7.5 小結(jié) 235
第8章 欠擬合、過(guò)擬合,以及機(jī)器學(xué)習(xí)的通用流程 236
8.1 定義氣溫預(yù)測(cè)問(wèn)題 236
8.2 欠擬合、過(guò)擬合,以及應(yīng)對(duì)措施 240
8.2.1 欠擬合 240
8.2.2 過(guò)擬合 242
8.2.3 用權(quán)重正則化應(yīng)對(duì)過(guò)擬合并可視化其成效 244
8.3 機(jī)器學(xué)習(xí)的通用流程 248
8.4 練習(xí) 250
8.5 小結(jié) 251
第9章 針對(duì)序列和文本的深度學(xué)習(xí) 252
9.1 用RNN對(duì)氣溫預(yù)測(cè)問(wèn)題進(jìn)行第二次嘗試 253
9.1.1 為何密集層無(wú)法為序列中的順序信息建!253
9.1.2 RNN層如何為序列中的順序建!255
9.2 構(gòu)建針對(duì)文本的深度學(xué)習(xí)模型 263
9.2.1 文本在機(jī)器學(xué)習(xí)中的表示方法:one-hot編碼和multi-hot編碼 264
9.2.2 對(duì)情感分析問(wèn)題的第 一次嘗試 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 下個(gè)字符預(yù)測(cè)器:一種簡(jiǎn)單的文本生成方法 290
10.1.2 基于LSTM的文本生成器示例 292
10.1.3 混沌值:調(diào)節(jié)生成文本的隨機(jī)程度的閥門(mén) 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 見(jiàn)證針對(duì)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í)問(wèn)題 323
11.2 策略網(wǎng)絡(luò)和策略梯度:平衡倒立擺示例 326
11.2.1 用強(qiáng)化學(xué)習(xí)的框架定義平衡倒立擺問(wèn)題 326
11.2.2 策略網(wǎng)絡(luò) 328
11.2.3 訓(xùn)練策略網(wǎng)絡(luò):REINFORCE算法 331
11.3 價(jià)值網(wǎng)絡(luò)和Q學(xué)習(xí):《貪吃蛇》游戲示例 337
11.3.1 用強(qiáng)化學(xué)習(xí)的框架定義貪吃蛇問(wèn)題 337
11.3.2 馬爾可夫決策過(guò)程和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é)語(yǔ)
第 12章 模型的測(cè)試、優(yōu)化和部署 360
12.1 測(cè)試TensorFlow.js模型 360
12.1.1 傳統(tǒng)的單元測(cè)試 362
12.1.2 基于黃金值的測(cè)試 364
12.1.3 關(guān)于持續(xù)訓(xùn)練的一些思考 366
12.2 模型優(yōu)化 367
12.2.1 通過(guò)訓(xùn)練后的權(quán)重量化優(yōu)化模型體積 367
12.2.2 基于GraphModel轉(zhuǎn)換的推斷速度優(yōu)化 373
12.3 部署TensorFlow.js模型到不同的平臺(tái)和環(huán)境 378
12.3.1 部署到Web環(huán)境時(shí)的一些額外考量 378
12.3.2 部署到云環(huán)境 379
12.3.3 部署到瀏覽器插件(例如Chrome插件)環(huán)境 380
12.3.4 部署到基于JavaScript的移動(dòng)端應(yīng)用程序 382
12.3.5 部署到基于JavaScript的跨平臺(tái)桌面端應(yīng)用程序 383
12.3.6 部署到微信和其他基于JavaScript的移動(dòng)端插件系統(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í)帶來(lái)的新應(yīng)用和新機(jī)遇 393
13.2 回顧深度學(xué)習(xí)的流程和TensorFlow.js中的算法 394
13.2.1 監(jiān)督式深度學(xué)習(xí)的通用流程 394
13.2.2 回顧TensorFlow.js中的模型類(lèi)型和層類(lèi)型 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ā)展趨勢(shì) 406
13.4 繼續(xù)探索的一些指引 407
13.4.1 在Kaggle上練習(xí)解決實(shí)際的機(jī)器學(xué)習(xí)問(wèn)題 407
13.4.2 了解arXiv上的最新進(jìn)展 408
13.4.3 探索TensorFlow.js生態(tài) 408
13.5 寄語(yǔ) 408
附錄A 安裝tfjs-node-gpu及其依賴(lài)(圖靈社區(qū)下載)
附錄B TensorFlow.js張量及運(yùn)算的簡(jiǎn)明教程(圖靈社區(qū)下載)
術(shù)語(yǔ)表(圖靈社區(qū)下載)