深度學習基礎與工程實踐
內容描述
本書以工程實踐為主線,基於TensorFlow 2.0軟件框架詳細介紹了深度學習的工作原理和方法,並以實際代碼為例,剖析了構建神經網絡模型的流程、全連接網絡的運行原理、捲積神經網絡的結構與運行機制、循環神經網絡的結構與運行機制,討論了使用Dense、Conv1D、Conv2D、SimpleRNN、LTSM、GRU、Bidirectional等深度學習模型解決電腦視覺、序列問題的方法,並在此基礎上基於具體示例介紹了深度學習的高階實踐。
目錄大綱
第1章 搭建環境
1.1 安裝Anaconda 2
1.2 安裝CUDA及其加速器 3
1.3 安裝TensorFlow 2.0 4
1.4 開發環境——Spyder 6
1.5 可視化分析工具——TensorBoard 7
第2章 機器學習與深度學習
2.1 機器學習 11
2.2 深度學習 13
第3章 構建神經網絡模型
3.1 搭建一個全連接網絡 17
3.2 確定要解決的問題 19
3.3 準備數據與數據預處理 20
3.3.1 數據集 22
3.3.2 擬合問題初探 23
3.3.3 數據集劃分與數據污染 25
3.3.4 神經網絡中的數據表示 26
3.3.5 張量操作 30
3.3.6 數據預處理 32
3.4 構建神經網絡 34
3.4.1 構建神經網絡的方法 34
3.4.2 理解Sequential Model的構建方法 35
3.4.3 理解layers與layer 37
3.4.4 理解models與model 39
3.4.5 理解Dense 39
3.4.6 激活函數 40
3.5 編譯模型 42
3.5.1 優化器 43
3.5.2 損失函數 44
3.5.3 評價指標 46
3.6 訓練模型 47
3.6.1 使用fit方法訓練模型 47
3.6.2 使用fit_generator方法訓練模型 51
3.6.3 使用TensorBoard回調函數訓練模型 52
3.7 模型 59
3.7.1 性能評估 59
3.7.2 模型預測 60
3.8 保存模型 62
3.8.1 save方式 62
3.8.2 save_weights方式 63
3.8.3 SavedModel方式 64
3.9 使用模型 64
3.9.1 以save_weights方式保存的模型的加載方法 64
3.9.2 以save方式保存的模型的加載方法 65
3.9.3 以SavedModel方式保存的模型的加載方法 66
3.10 模型的重新訓練與預測 66
3.11 使用模型在新數據上進行推理 69
第4章 全連接網絡
4.1 全連接層 72
4.2 使用全連接網絡解決文本分類問題 74
4.2.1 基於IMDB數據集的二分類任務 75
4.2.2 基於Reuters數據集的多分類任務 79
4.3 使用全連接網絡解決標量回歸問題 82
4.3.1 使用留出驗證集方式訓練模型 86
4.3.2 使用K折交叉驗證方式訓練模型 87
4.4 全連接網絡圖片分類問題的優化 88
4.4.1 降低模型容量:縮減模型的參數 90
4.4.2 奧卡姆剃刀原則:正則化模型參數 91
4.4.3 初識隨機失活:Dropout 92
第5章 捲積神經網絡
5.1 使用CNN解決MNIST數據集的分類問題 96
5.2 全連接網絡面臨的問題 98
5.3 局部相關性與權值共享 100
5.4 構建捲積神經網絡 102
5.4.1 CNN與Dense性能比較 102
5.4.2 捲積層 104
5.4.3 池化層 108
5.4.4 打平層 111
5.4.5 捲積神經網絡基礎架構 113
5.5 使用Conv1D解決二分類問題 115
5.5.1 EarlyStopping函數:訓練終止 118
5.5.2 ModelCheckpoint函數:動態保存模型 120
5.5.3 再談隨機失活 122
第6章 循環神經網絡
6.1 循環神經網絡基礎 126
6.1.1 序列 126
6.1.2 序列向量化 126
6.1.3 權值共享 130
6.1.4 全局語義 130
6.1.5 循環神經網絡概述 131
6.1.6 循環層 132
6.2 SimpleRNN 133
6.2.1 序列數據的預處理 136
6.2.2 理解SimpleRNN層 137
6.3 LSTM網絡 141
6.3.1 短時記憶與遺忘曲線 141
6.3.2 梯度問題 142
6.3.3 門控機制 143
6.3.4 理解LSTM層 144
6.4 GRU 151
6.4.1 LSTM網絡面臨的問題 151
6.4.2 門控機制的優化方法 152
6.4.3 理解GRU層 152
6.5 雙向循環神經網絡 159
6.5.1 雙向LSTM網絡 161
6.5.2 雙向GRU 164
6.6 解決循環神經網絡的擬合問題 167
6.6.1 通過正則化模型參數解決擬合問題 167
6.6.2 使用隨機失活解決擬合問題 168
第7章 深度學習高階實踐
7.1 函數式API網絡模型 173
7.1.1 如何實現層圖共享 177
7.1.2 如何實現模型共享 180
7.1.3 如何實現模型組裝與嵌套 183
7.1.4 如何實現多輸入多輸出模型 185
7.2 混合網絡模型 189
7.3 基於Xception架構實現圖片分類任務 191
7.3.1 Xception架構 191
7.3.2 使用image_dataset_from_directory函數構建數據集 194
7.3.3 數據增強技術 199
7.3.4 數據增強器的使用 201
7.3.5 二維深度分離捲積層:SeparableConv2D 202
7.3.6 數據標準化前置與中置 205
7.3.7 編譯與訓練模型 206
7.3.8 在新數據上進行推理 207
7.4 殘差網絡在CIFAR10數據集上的實踐 208
7.4.1 CIFAR10數據集 208
7.4.2 深度殘差網絡:ResNet 209
7.4.3 基於ResNet構建多分類任務模型 211
7.5 GloVe預訓練詞嵌入實踐 215
7.5.1 從原始文件構建訓練集 216
7.5.2 解析並加載GloVe 220
7.5.3 在二分類模型中使用詞嵌入矩陣 221
7.5.4 模型的編譯與訓練 222
7.5.5 構建集與模型評估 222
7.6 基於預訓練網絡VGG16完成圖片分類任務 224
7.6.1 預訓練網絡 224
7.6.2 預訓練網絡之特徵提取方法 225
7.6.3 預訓練網絡之微調模型方法 230
7.7 生成式深度學習實踐 237
7.7.1 基於ResNet50的Deep Dream技術實踐 238
7.7.2 基於VGG19網絡的風格遷移實踐 244
7.8 使用自定義回調函數監控模型的行為 253
7.8.1 將約束理論應用於模型調優 254
7.8.2 構建全局回調函數 255
7.8.3 構建epoch級的自定義回調函數 258
7.8.4 構建batch級的自定義回調函數 260
第8章 模型的工程封裝與部署
8.1 深度學習模型的封裝方法 263
8.2 使用Flask部署神經網絡模型 264
8.2.1 Flask是什麼 265
8.2.2 將模型部署成接口提供給第三方使用 267
8.2.3 深度學習模型與Web應用協同工作 270
8.3 基於TFX的部署實踐 273
8.3.1 TensorFlow Serving服務模型 273
8.3.2 基於TensorFlow Serving與Docker部署深度學習模型 275
第9章 回顧與展望
9.1 神經網絡的架構 281
9.2 構建神經網絡模型的流程與實踐 282
9.3 深度學習的局限性與展望 285
作者介紹
香港理工大學軟件科技理學碩士,中國人工智能學會會員,香港理工大學北京校友會理事。在計算機行業工作近30年,長期從事產品研發與項目管理工作,曾就職於北控、盛大等企業,目前是一家知名人工智能企業的合夥人,負責創新性產品的規劃與研發,致力於深度學習領域的探索與產品化實踐。