本書由流行深度學(xué)習(xí)框架Keras之父弗朗索瓦·肖萊執(zhí)筆,通過直觀的解釋和豐富的示例幫助你構(gòu)建深度學(xué)習(xí)知識體系。作者避免使用數(shù)學(xué)符號,轉(zhuǎn)而采用Python代碼來解釋深度學(xué)習(xí)的核心思想。全書共計14章,既涵蓋了深度學(xué)習(xí)的基本原理,又體現(xiàn)了這一迅猛發(fā)展的領(lǐng)域在近幾年里取得的重要進展,包括Transformer架構(gòu)的原理和示例。讀完本書后,你將能夠使用Keras解決從計算機視覺到自然語言處理等現(xiàn)實世界的諸多問題,包括圖像分類、圖像分割、時間序列預(yù)測、文本分類、機器翻譯、文本生成等。
近年來,深度學(xué)習(xí)在自然語言處理、計算機視覺等領(lǐng)域取得了非凡的進展。從機器翻譯和文本生成到自動駕駛和虛擬助手,我們受益于深度學(xué)習(xí)技術(shù)的逐漸普及。然而,深度學(xué)習(xí)還遠未發(fā)揮全部潛力。歡迎來到深度學(xué)習(xí)的世界!在這個規(guī)模呈爆發(fā)式增長的領(lǐng)域,仍有許多“寶藏”等待你去發(fā)掘。
本書由流行深度學(xué)習(xí)框架Keras之父弗朗索瓦·肖萊執(zhí)筆,不用數(shù)學(xué)公式,而用Python代碼幫助你直觀理解深度學(xué)習(xí)的核心思想。本書在第1版的基礎(chǔ)上進行了大幅更新和增補,以體現(xiàn)深度學(xué)習(xí)領(lǐng)域的快速發(fā)展。
- Keras和TensorFlow入門:詳解實踐深度學(xué)習(xí)所需的全部知識
- 神經(jīng)網(wǎng)絡(luò)入門:分類與回歸
- 計算機視覺、時間序列預(yù)測、生成式深度學(xué)習(xí)
- 新增Transformer架構(gòu)的原理及用法
- 新增機器學(xué)習(xí)的工作流程
- 隨書提供Jupyter notebook,采用TensorFlow 2.6
【作者簡介】
弗朗索瓦·肖萊(Franc?ois Chollet)
谷歌公司深度學(xué)習(xí)科學(xué)家,流行深度學(xué)習(xí)框架Keras之父。Keras的GitHub星標(biāo)數(shù)近6萬,用戶數(shù)量已超100萬。此外,他也是TensorFlow框架的貢獻者,個人Kaggle競賽全球排名曾獲第17名。利用Keras,他致力于普及深度學(xué)習(xí)技術(shù)和實現(xiàn)通用人工智能。
【譯者簡介】
張亮(hysic)
畢業(yè)于北京大學(xué)物理學(xué)院,核安全高級工程師,深諳機器學(xué)習(xí)和數(shù)據(jù)分析,譯有《Python機器學(xué)習(xí)基礎(chǔ)教程》《Python數(shù)據(jù)處理》等。
第 1章 什么是深度學(xué)習(xí) 1
1.1 人工智能、機器學(xué)習(xí)和深度學(xué)習(xí) 1
1.1.1 人工智能 2
1.1.2 機器學(xué)習(xí) 2
1.1.3 從數(shù)據(jù)中學(xué)習(xí)規(guī)則與表示 3
1.1.4 深度學(xué)習(xí)之“深度” 5
1.1.5 用三張圖理解深度學(xué)習(xí)的工作原理 7
1.1.6 深度學(xué)習(xí)已取得的進展 8
1.1.7 不要相信短期炒作 9
1.1.8 人工智能的未來 10
1.2 深度學(xué)習(xí)之前:機器學(xué)習(xí)簡史 10
1.2.1 概率建模 11
1.2.2 早期神經(jīng)網(wǎng)絡(luò) 11
1.2.3 核方法 11
1.2.4 決策樹、隨機森林和梯度提升機 12
1.2.5 回到神經(jīng)網(wǎng)絡(luò) 13
1.2.6 深度學(xué)習(xí)有何不同 14
1.2.7 機器學(xué)習(xí)現(xiàn)狀 14
1.3 為什么要用深度學(xué)習(xí),為什么是現(xiàn)在 16
1.3.1 硬件 17
1.3.2 數(shù)據(jù) 17
1.3.3 算法 18
1.3.4 新一輪投資熱潮 18
1.3.5 深度學(xué)習(xí)的普及 19
1.3.6 這種趨勢會持續(xù)下去嗎 20
第 2章 神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ) 21
2.1 初識神經(jīng)網(wǎng)絡(luò) 21
2.2 神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)表示 25
2.2.1 標(biāo)量(0階張量) 25
2.2.2 向量(1階張量) 25
2.2.3 矩陣(2階張量) 26
2.2.4 3階張量與更高階的張量 26
2.2.5 關(guān)鍵屬性 26
2.2.6 在NumPy中操作張量 28
2.2.7 數(shù)據(jù)批量的概念 28
2.2.8 現(xiàn)實世界中的數(shù)據(jù)張量實例 29
2.2.9 向量數(shù)據(jù) 29
2.2.10 時間序列數(shù)據(jù)或序列數(shù)據(jù) 29
2.2.11 圖像數(shù)據(jù) 30
2.2.12 視頻數(shù)據(jù) 31
2.3 神經(jīng)網(wǎng)絡(luò)的“齒輪”:張量運算 31
2.3.1 逐元素運算 32
2.3.2 廣播 33
2.3.3 張量積 34
2.3.4 張量變形 36
2.3.5 張量運算的幾何解釋 37
2.3.6 深度學(xué)習(xí)的幾何解釋 40
2.4 神經(jīng)網(wǎng)絡(luò)的“引擎”:基于梯度的優(yōu)化 40
2.4.1 什么是導(dǎo)數(shù) 41
2.4.2 張量運算的導(dǎo)數(shù):梯度 42
2.4.3 隨機梯度下降 44
2.4.4 鏈?zhǔn)角髮?dǎo):反向傳播算法 46
2.5 回顧第 一個例子 51
2.5.1 用TensorFlow 從頭開始重新實現(xiàn)第 一個例子 52
2.5.2 完成一次訓(xùn)練步驟 54
2.5.3 完整的訓(xùn)練循環(huán) 55
2.5.4 評估模型 55
2.6 本章總結(jié) 56
第3章 Keras 和TensorFlow 入門 57
3.1 TensorFlow 簡介 57
3.2 Keras 簡介 58
3.3 Keras 和TensorFlow 簡史 59
3.4 建立深度學(xué)習(xí)工作區(qū) 60
3.4.1 Jupyter筆記本:運行深度學(xué)習(xí)實驗的首選方法 60
3.4.2 使用Colaboratory 61
3.5 TensorFlow入門 63
3.5.1 常數(shù)張量和變量 64
3.5.2 張量運算:用TensorFlow進行數(shù)學(xué)運算 66
3.5.3 重溫GradientTape API 66
3.5.4 一個端到端的例子:用TensorFlow編寫線性分類器 67
3.6 神經(jīng)網(wǎng)絡(luò)剖析:了解核心Keras API 71
3.6.1 層:深度學(xué)習(xí)的基礎(chǔ)模塊 71
3.6.2 從層到模型 74
3.6.3 編譯步驟:配置學(xué)習(xí)過程 75
3.6.4 選擇損失函數(shù) 77
3.6.5 理解fit()方法 77
3.6.6 監(jiān)控驗證數(shù)據(jù)上的損失和指標(biāo) 78
3.6.7 推斷:在訓(xùn)練后使用模型 79
3.7 本章總結(jié) 80
第4章 神經(jīng)網(wǎng)絡(luò)入門:分類與回歸 81
4.1 影評分類:二分類問題示例 82
4.1.1 IMDB 數(shù)據(jù)集 82
4.1.2 準(zhǔn)備數(shù)據(jù) 83
4.1.3 構(gòu)建模型 84
4.1.4 驗證你的方法 87
4.1.5 利用訓(xùn)練好的模型對新數(shù)據(jù)進行預(yù)測 90
4.1.6 進一步實驗 90
4.1.7 小結(jié) 90
4.2 新聞分類:多分類問題示例 91
4.2.1 路透社數(shù)據(jù)集 91
4.2.2 準(zhǔn)備數(shù)據(jù) 92
4.2.3 構(gòu)建模型 92
4.2.4 驗證你的方法 93
4.2.5 對新數(shù)據(jù)進行預(yù)測 96
4.2.6 處理標(biāo)簽和損失的另一種方法 96
4.2.7 擁有足夠大的中間層的重要性 96
4.2.8 進一步實驗 97
4.2.9 小結(jié) 97
4.3 預(yù)測房價:標(biāo)量回歸問題示例 97
4.3.1 波士頓房價數(shù)據(jù)集 98
4.3.2 準(zhǔn)備數(shù)據(jù) 98
4.3.3 構(gòu)建模型 99
4.3.4 利用K折交叉驗證來驗證你的方法 99
4.3.5 對新數(shù)據(jù)進行預(yù)測 103
4.3.6 小結(jié) 103
4.4 本章總結(jié) 104
第5章 機器學(xué)習(xí)基礎(chǔ) 105
5.1 泛化:機器學(xué)習(xí)的目標(biāo) 105
5.1.1 欠擬合與過擬合 105
5.1.2 深度學(xué)習(xí)泛化的本質(zhì) 110
5.2 評估機器學(xué)習(xí)模型 115
5.2.1 訓(xùn)練集、驗證集和測試集 115
5.2.2 超越基于常識的基準(zhǔn) 118
5.2.3 模型評估的注意事項 119
5.3 改進模型擬合 119
5.3.1 調(diào)節(jié)關(guān)鍵的梯度下降參數(shù) 119
5.3.2 利用更好的架構(gòu)預(yù)設(shè) 121
5.3.3 提高模型容量 121
5.4 提高泛化能力 123
5.4.1 數(shù)據(jù)集管理 123
5.4.2 特征工程 124
5.4.3 提前終止 125
5.4.4 模型正則化 125
5.5 本章總結(jié) 132
第6章 機器學(xué)習(xí)的通用工作流程 133
6.1 定義任務(wù) 134
6.1.1 定義問題 134
6.1.2 收集數(shù)據(jù)集 135
6.1.3 理解數(shù)據(jù) 138
6.1.4 選擇衡量成功的指標(biāo) 139
6.2 開發(fā)模型 139
6.2.1 準(zhǔn)備數(shù)據(jù) 139
6.2.2 選擇評估方法 140
6.2.3 超越基準(zhǔn) 141
6.2.4 擴大模型規(guī)模:開發(fā)一個過擬合的模型 142
6.2.5 模型正則化與調(diào)節(jié)超參數(shù) 142
6.3 部署模型 143
6.3.1 向利益相關(guān)者解釋你的工作并設(shè)定預(yù)期 143
6.3.2 部署推斷模型 143
6.3.3 監(jiān)控模型在真實環(huán)境中的性能 146
6.3.4 維護模型 146
6.4 本章總結(jié) 147
第7章 深入Keras 148
7.1 Keras 工作流程 148
7.2 構(gòu)建Keras 模型的不同方法 149
7.2.1 序貫?zāi)P? 149
7.2.2 函數(shù)式API 152
7.2.3 模型子類化 157
7.2.4 混合使用不同的組件 159
7.2.5 用正確的工具完成工作 160
7.3 使用內(nèi)置的訓(xùn)練循環(huán)和評估循環(huán) 160
7.3.1 編寫自定義指標(biāo) 161
7.3.2 使用回調(diào)函數(shù) 162
7.3.3 編寫自定義回調(diào)函數(shù) 164
7.3.4 利用TensorBoard進行監(jiān)控和可視化 165
7.4 編寫自定義的訓(xùn)練循環(huán)和評估循環(huán) 167
7.4.1 訓(xùn)練與推斷 168
7.4.2 指標(biāo)的低階用法 169
7.4.3 完整的訓(xùn)練循環(huán)和評估循環(huán) 169
7.4.4 利用tf.function加快運行速度 171
7.4.5 在fit()中使用自定義訓(xùn)練循環(huán) 172
7.5 本章總結(jié) 174
第8章 計算機視覺深度學(xué)習(xí)入門 175
8.1 卷積神經(jīng)網(wǎng)絡(luò)入門 176
8.1.1 卷積運算 178
8.1.2 最大匯聚運算 182
8.2 在小型數(shù)據(jù)集上從頭開始訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò) 184
8.2.1 深度學(xué)習(xí)對數(shù)據(jù)量很小的問題的適用性 184
8.2.2 下載數(shù)據(jù) 185
8.2.3 構(gòu)建模型 . 187
8.2.4 數(shù)據(jù)預(yù)處理 189
8.2.5 使用數(shù)據(jù)增強 193
8.3 使用預(yù)訓(xùn)練模型 196
8.3.1 使用預(yù)訓(xùn)練模型做特征提取 197
8.3.2 微調(diào)預(yù)訓(xùn)練模型 204
8.4 本章總結(jié) 208
第9章 計算機視覺深度學(xué)習(xí)進階 209
9.1 三項基本的計算機視覺任務(wù) 209
9.2 圖像分割示例 210
9.3 現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)模式 218
9.3.1 模塊化、層次結(jié)構(gòu)和復(fù)用 218
9.3.2 殘差連接 221
9.3.3 批量規(guī)范化 224
9.3.4 深度可分離卷積 226
9.3.5 綜合示例:一個類似Xception的迷你模型 227
9.4 解釋卷積神經(jīng)網(wǎng)絡(luò)學(xué)到的內(nèi)容 229
9.4.1 中間激活值的可視化 230
9.4.2 卷積神經(jīng)網(wǎng)絡(luò)濾波器的可視化 235
9.4.3 類激活熱力圖的可視化 241
9.5 本章總結(jié) 246
第 10章 深度學(xué)習(xí)處理時間序列 247
10.1 不同類型的時間序列任務(wù) 247
10.2 溫度預(yù)測示例 248
10.2.1 準(zhǔn)備數(shù)據(jù) 251
10.2.2 基于常識、不使用機器學(xué)習(xí)的基準(zhǔn) 254
10.2.3 基本的機器學(xué)習(xí)模型 254
10.2.4 一維卷積模型 256
10.2.5 第 一個RNN 基準(zhǔn) 258
10.3 理解RNN 259
10.4 RNN 的高級用法 265
10.4.1 利用循環(huán)dropout 降低過擬合 265
10.4.2 循環(huán)層堆疊 268
10.4.3 使用雙向RNN 269
10.4.4 進一步實驗 271
10.5 本章總結(jié) 272
第 11章 深度學(xué)習(xí)處理文本 273
11.1 自然語言處理概述 273
11.2 準(zhǔn)備文本數(shù)據(jù) 274
11.2.1 文本標(biāo)準(zhǔn)化 275
11.2.2 文本拆分(詞元化) 276
11.2.3 建立詞表索引 277
11.2.4 使用TextVectorization層 278
11.3 表示單詞組的兩種方法:集合和序列 282
11.3.1 準(zhǔn)備IMDB 影評數(shù)據(jù) 282
11.3.2 將單詞作為集合處理:詞袋方法 284
11.3.3 將單詞作為序列處理:序列模型方法 289
11.4 Transformer架構(gòu) 298
11.4.1 理解自注意力 298
11.4.2 多頭注意力 302
11.4.3 Transformer編碼器 303
11.4.4 何時使用序列模型而不是詞袋模型 309
11.5 超越文本分類:序列到序列學(xué)習(xí) 310
11.5.1 機器翻譯示例 312
11.5.2 RNN 的序列到序列學(xué)習(xí) 314
11.5.3 使用Transformer 進行序列到序列學(xué)習(xí) 318
11.6 本章總結(jié) 323
第 12章 生成式深度學(xué)習(xí) 324
12.1 文本生成 325
12.1.1 生成式深度學(xué)習(xí)用于序列生成的簡史 325
12.1.2 如何生成序列數(shù)據(jù) 326
12.1.3 采樣策略的重要性 327
12.1.4 用Keras 實現(xiàn)文本生成 328
12.1.5 帶有可變溫度采樣的文本生成回調(diào)函數(shù) 331
12.1.6 小結(jié) 334
12.2 DeepDream 334
12.2.1 用Keras 實現(xiàn)DeepDream 335
12.2.2 小結(jié) 341
12.3 神經(jīng)風(fēng)格遷移 341
12.3.1 內(nèi)容損失 342
12.3.2 風(fēng)格損失 342
12.3.3 用Keras 實現(xiàn)神經(jīng)風(fēng)格遷移 343
12.3.4 小結(jié) 348
12.4 用變分自編碼器生成圖像 348
12.4.1 從圖像潛在空間中采樣 348
12.4.2 圖像編輯的概念向量 350
12.4.3 變分自編碼器 350
12.4.4 用Keras 實現(xiàn)變分自編碼器 352
12.4.5 小結(jié) 357
12.5 生成式對抗網(wǎng)絡(luò)入門 358
12.5.1 簡要實現(xiàn)流程 359
12.5.2 諸多技巧 360
12.5.3 CelebA 數(shù)據(jù)集 360
12.5.4 判別器 361
12.5.5 生成器 362
12.5.6 對抗網(wǎng)絡(luò) 364
12.5.7 小結(jié) 366
12.6 本章總結(jié) 367
第 13章 適合現(xiàn)實世界的最佳實踐 368
13.1 將模型性能發(fā)揮到極致 368
13.1.1 超參數(shù)優(yōu)化 368
13.1.2 模型集成 375
13.2 加速模型訓(xùn)練 376
13.2.1 使用混合精度加快GPU上的訓(xùn)練速度 377
13.2.2 多GPU訓(xùn)練 380
13.2.3 TPU訓(xùn)練 382
13.3 本章總結(jié) 384
第 14章 總結(jié) 385
14.1 重點概念回顧 385
14.1.1 人工智能的多種方法 385
14.1.2 深度學(xué)習(xí)在機器學(xué)習(xí)領(lǐng)域中的特殊之處 386
14.1.3 如何看待深度學(xué)習(xí) 386
14.1.4 關(guān)鍵的推動技術(shù) 387
14.1.5 機器學(xué)習(xí)的通用工作流程 388
14.1.6 關(guān)鍵網(wǎng)絡(luò)架構(gòu) 388
14.1.7 可能性空間 392
14.2 深度學(xué)習(xí)的局限性 394
14.2.1 將機器學(xué)習(xí)模型擬人化的風(fēng)險 394
14.2.2 自動機與智能體 396
14.2.3 局部泛化與極端泛化 397
14.2.4 智能的目的 399
14.2.5 逐步提高泛化能力 400
14.3 如何實現(xiàn)更加通用的人工智能 401
14.3.1 設(shè)定正確目標(biāo)的重要性:捷徑法則 401
14.3.2 新目標(biāo) 402
14.4 實現(xiàn)智能:缺失的內(nèi)容 403
14.4.1 智能是對抽象類比的敏感性 404
14.4.2 兩種抽象 405
14.4.3 深度學(xué)習(xí)所缺失的那一半 407
14.5 深度學(xué)習(xí)的未來 408
14.5.1 模型即程序 408
14.5.2 將深度學(xué)習(xí)與程序合成融合 409
14.5.3 終身學(xué)習(xí)和模塊化子程序復(fù)用 411
14.5.4 長期愿景 412
14.6 了解快速發(fā)展的領(lǐng)域的最新進展 413
14.6.1 在Kaggle 上練習(xí)解決現(xiàn)實世界的問題 413
14.6.2 在arXiv上了解最新進展 414
14.6.3 探索Keras 生態(tài)系統(tǒng) 414
14.7 結(jié)束語 414