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