隨著深度學習理論的不斷發(fā)展以及 TensorFlow 的廣泛應用,基于深度學習的信號分析模型在不同領域產生了深遠的影響。本書為TensorFlow 2的使用指南,從軟件安裝、數據下載、文件管理等方面入手為初級開發(fā)者提供細致而全面的介紹。在此基礎上,本書系統地介紹了TensorFlow 2在人工神經網絡實戰(zhàn)項目中的應用,全面覆蓋了各種深度學習架構,內容涉及:入門級的二分類模型、回歸模型等;進階級的文本生成模型、圖像生成模型、機器翻譯模型、時序預測模型等;以及的Transformer模型等。在每個項目中,本書完整地展示了模型設計、網絡搭建、模型訓練、模型保存、結果預測與顯示的全過程,并提供了詳細的實現代碼。本書將深度學習理論與實際項目結合,為初學者搭建了進入人工智能領域的學習平臺,為深度學習算法開發(fā)者提供了較為全面的應用范例,充分滿足了不同群體的學習需求。
理論與實際項目結合,實例豐富,講解詳細,可操作性強,易于理解和掌握
隨著深度學習技術的不斷發(fā)展,使用TensorFlow搭建的機器學習模型在多個領域產生了巨大影響。對于開發(fā)人員來說,這是一個很好的學習機會,可以將軟件開發(fā)技能應用于更多實際項目中。了解時下熱點的深度學習模型十分有必要,因此,本書以項目為導向,提供了基于深度神經網絡和版本 TensorFlow 的實戰(zhàn)項目,全面覆蓋了各種深度學習模型。
第 1 章首先介紹了 TensorFlow 2,深度剖析了TensorFlow被廣泛使用的原因,描述了 TensorFlow 的各種功能,包括使用tf.keras搭建模型、分布式訓練、模型部署及數據通道的使用,并指導了本書開發(fā)環(huán)境的搭建。
第 2 章更加深入地介紹了 TensorFlow 2。按照慣例,第2章從一個簡單的Hello World類應用程序開始,介紹了完整的機器學習開發(fā)過程。接下來使用TensorFlow完成機器學習的入門項目,即二分類問題。通過此項目的學習,有助于讀者了解數據預處理、使用 tf.keras 的預留接口定義神經網絡、模型訓練、使用 TensorBoard評估分類模型性能及學習使用混淆矩陣。
第 3 章詳細介紹了 tf.keras 模塊及帶有模型構建功能的API。本章向讀者介紹如何使用TensorFlow面向對象的編程模式搭建網絡模型及如何通過子類創(chuàng)建自定義的層。此外,讀者將學習如何使用 TensorFlow 的 SavedModel 接口及幾種部分或完整保存模型的方法。學習了上述基本方法后,讀者將使用 tf.keras 中預定義的卷積神經網絡層進行多分類項目實戰(zhàn),本書將向讀者展示如何測試不同的網絡架構并優(yōu)化模型性能。
由于訓練深度神經網絡需要充足的計算資源,因此在第 4 章將向讀者展示如何使用遷移學習技術加載預訓練的網絡模型。本章涉及兩個項目:第1個項目展示如何使用在ImageNet數據集中預訓練的分類器對其他圖像集進行分類;第2個項目介紹如何基于預訓練模型構建自己的分類器。
學習使用深度學習技術都是從分類和回歸問題入手。在前面的章節(jié)中,我們深入探討了分類問題,接下來,是否可以使用深度神經網絡進行回歸分析?針對這一問題,已有幾種基于統計的深度學習模型可供我們分析。因此,第 5 章將基于3種不同的神經網絡架構展示如何使用深度神經網絡完成回歸問題。
盡管使用預訓練模型可以提高自定義模型的開發(fā)效率,但在許多情況下,很難找到合適的預訓練模型。從頭開始進行模型開發(fā)需要大量組件,TensorFlow 中的Estimators可以幫助開發(fā)過程中處理復雜的組件。第 6 章介紹Estimators的使用,共包含4個項目。前兩個項目描述如何使用預定義的Estimators進行分類與回歸,第3個項目討論如何從頭開始創(chuàng)建自定義的Estimators,后一個項目討論為預訓練模型創(chuàng)建Estimators。
第7章討論文本生成技術,介紹了用于文本生成的循環(huán)神經網絡(RNN)和長短期記憶力模塊(LSTM)。第1個項目展示了如何將 LSTM 用于為新生兒起名的簡單應用。第2個項目使用更加高級的文本生成技術,創(chuàng)建與列夫·托爾斯泰著名小說《戰(zhàn)爭與和平》的語言風格相匹配的文本。由于訓練文本生成模型耗時較長,本章后介紹如何在中斷訓練后繼續(xù)進行模型訓練。
第8章將進一步介紹文本生成技術,講解了 seq2seq 模型、編碼器和解碼器架構及用于文本翻譯的注意力模型。本章深入介紹了使用GloVe詞嵌入模塊的英語到西班牙語翻譯器,向讀者展示了如何使用編碼器、解碼器和注意力層自定義機器學習模型。
第9章介紹了自然語言處理中的文本生成技術,即Transformer。通過一個完整的實戰(zhàn)項目教讀者如何用Python 語言構建Transformer,并在沒有預訓練模型的前提下,在Transformer中使用雙向編碼器。
了解了文本生成技術后,本書第10章將講解使用深度學習技術進行圖像處理。第 10 章使用之前學到的長短期記憶力模塊為圖像生成標題。該項目使用預訓練的 InceptionV3 模型進行圖像處理,這是第 4 章介紹的遷移學習的實際應用。通過此項目開發(fā),讀者將學會如何使用 Bahdanau Attention 創(chuàng)建解碼器,以及使用此模型為任何圖像添加描述。
第11章進入機器學習的另一個領域,即時間序列分析和預測。本章提供了兩個完整的項目,包括單變量時間序列預測及多變量時間序列預測。
第12章講解圖像處理領域中基于深度學習的風格遷移技術,可以將著名畫家的風格應用于用相機拍攝的照片中,使照片看起來像著名畫家的作品。本章包含兩個項目:第1個項目使用來自 TensorFlow 中自帶的預訓練模型快速完成風格遷移;第2個項目深入講解如何使用經典的 VGG16 架構提取圖像和名畫的特征,以及如何定義評價標準用于比較風格轉換前后的內容和樣式損失,并創(chuàng)建終的風格化圖片。
第13章介紹一個重要的深度神經網絡架構,即生成對抗網絡。本章共包含3個項目,第1個項目和第2個項目分別展示如何使用GAN生成手寫數字圖像和手寫字母圖像,第3個項目使用 GAN 生成復雜的動漫彩色角色圖像。
第14章涉及一個重要的圖像處理技術,即如何對黑白圖像進行著色。本章使用 AutoEncoder 為圖像著色,共包含兩個項目。第1個項目構建了自定義的 AutoEncoder。第2個項目使用預訓練的 VGG16 模型進行特征編碼,用于提高模型性能。
本書詳盡地收集了若干種深度神經網絡架構,重點介紹了不同的深度學習模型在現實生活場景中的應用。
第1章 TensorFlow快速入門 001
1.1 什么是TensorFlow 2.0 002
1.1.1 TensorFlow 2.x平臺 002
1.1.2 訓練 003
1.1.3 模型保存 005
1.1.4 部署 005
1.2 TensorFlow 2.x提供什么 006
1.2.1 TensorFlow中的tf.keras 006
1.2.2 Eager執(zhí)行 006
1.2.3 分布式計算 007
1.2.4 TensorBoard 007
1.2.5 視覺套件(Vision Kit) 008
1.2.6 語音套件(Voice Kit) 008
1.2.7 邊緣套件(Edge TPU) 008
1.2.8 AIY套件的預訓練模型 009
1.2.9 數據管道 009
1.3 安裝 009
1.3.1 安裝步驟 009
1.3.2 Docker安裝 010
1.3.3 無安裝 010
1.4 測試 010
總結 012
第2章 深入研究TensorFlow 013
2.1 一個簡單的機器學習應用程序 013
2.1.1 創(chuàng)建Colab筆記本 014
2.1.2 導入 015
2.1.3 創(chuàng)建數據 016
2.1.4 定義神經網絡 018
2.1.5 編譯模型 018
2.1.6 訓練網絡 018
2.1.7 檢查訓練結果 019
2.1.8 預測 021
2.1.9 完整源碼 022
2.2 使用TensorFlow解決二分類問題 024
2.2.1 創(chuàng)建項目 024
2.2.2 導入 024
2.2.3 掛載Google云盤 025
2.2.4 加載數據 026
2.2.5 數據處理 027
2.2.6 定義ANN 030
2.2.7 模型訓練 032
2.2.8 完整源碼 036
總結 039
第3章 深入了解tf.keras 040
3.1 開始 040
3.2 用于模型構建的函數式API 041
3.2.1 序列化模型 041
3.2.2 模型子類 043
3.2.3 預定義層 044
3.2.4 自定義層 044
3.3 保存模型 046
3.4 卷積神經網絡 049
3.5 使用CNN做圖像分類 050
3.5.1 創(chuàng)建項目 051
3.5.2 圖像數據 051
3.5.3 加載數據 052
3.5.4 創(chuàng)建訓練、測試數據集 052
3.5.5 準備模型訓練數據 053
3.5.6 模型開發(fā) 055
3.5.7 定義模型 060
3.5.8 保存模型 073
3.5.9 預測未知圖像 073
總結 075
第4章 遷移學習 076
4.1 知識遷移 076
4.2 TensorFlow Hub 077
4.2.1 預訓練模型 078
4.2.2 模型的使用 079
4.3 ImageNet分類器 080
4.3.1 創(chuàng)建項目 080
4.3.2 分類器URL 080
4.3.3 創(chuàng)建模型 081
4.3.4 準備圖像 082
4.3.5 加載標簽映射 083
4.3.6 顯示預測結果 084
4.3.7 列出所有類別 085
4.3.8 結果討論 085
4.4 犬種分類器 085
4.4.1 項目簡介 086
4.4.2 創(chuàng)建項目 086
4.4.3 加載數據 086
4.4.4 設置圖像和標簽 088
4.4.5 圖像預處理 091
4.4.6 處理圖像 091
4.4.7 關聯圖像與標簽 092
4.4.8 創(chuàng)建數據批次 093
4.4.9 顯示圖像函數 094
4.4.10 選擇預訓練模型 095
4.4.11 定義模型 095
4.4.12 創(chuàng)建數據集 097
4.4.13 設置TensorBoard 099
4.4.14 訓練模型 100
4.4.15 訓練日志 100
4.4.16 驗證模型性能 101
4.4.17 預測測試圖像 101
4.4.18 可視化測試結果 103
4.4.19 預測未知圖像 105
4.4.20 使用小數據集訓練 106
4.4.21 保存、加載模型 107
4.5 提交你的工作 108
4.6 進一步工作 108
總結 109
第5章 使用神經網絡處理回歸問題 110
5.1 回歸 110
5.1.1 定義 110
5.1.2 應用 111
5.1.3 回歸問題 111
5.1.4 回歸問題的類型 111
5.2 神經網絡中的回歸問題 112
5.2.1 創(chuàng)建項目 112
5.2.2 提取特征和標簽 113
5.2.3 定義、訓練模型 113
5.2.4 預測 114
5.3 分析葡萄酒質量 114
5.3.1 創(chuàng)建項目 114
5.3.2 數據準備 114
5.3.3 下載數據 115
5.3.4 準備數據集 115
5.3.5 創(chuàng)建數據集 115
5.3.6 數據歸一化 116
5.3.7 創(chuàng)建模型 119
5.3.8 可視化評價函數 119
5.3.9 小模型 120
5.3.10 中模型 122
5.3.11 大模型 124
5.3.12 解決過擬合 126
5.3.13 結果討論 129
5.4 損失函數 130
5.4.1 均方誤差 130
5.4.2 平均誤差 131
5.4.3 Huber損失 131
5.4.4 Log Cosh損失 131
5.4.5 分位數損失 131
5.5 優(yōu)化器 132
總結 132
第6章 Estimators(估算器) 134
6.1 Estimators概述 134
6.1.1 API接口 135
6.1.2 Estimators的優(yōu)點 135
6.1.3 Estimators的類型 136
6.1.4 基于Estimators的項目開發(fā)流程 137
6.2 設置Estimators 139
6.3 用于分類的DNN分類器 139
6.3.1 加載數據 140
6.3.2 準備數據 140
6.3.3 Estimators輸入函數 141
6.3.4 創(chuàng)建Estimators實例 142
6.3.5 模型訓練 142
6.3.6 模型評價 143
6.3.7 預測未知數據 144
6.3.8 實驗不同的ANN結構 144
6.3.9 項目源碼 145
6.4 用于回歸的LinearRegressor 147
6.4.1 項目描述 147
6.4.2 創(chuàng)建項目 147
6.4.3 加載數據 148
6.4.4 特征選擇 148
6.4.5 數據清洗 149
6.4.6 創(chuàng)建數據集 151
6.4.7 建立特征列 152
6.4.8 定義輸入函數 154
6.4.9 創(chuàng)建Estimators實例對象 154
6.4.10 模型訓練 155
6.4.11 模型評估 155
6.4.12 項目源碼 156
6.5 自定義Estimators 158
6.5.1 創(chuàng)建項目 159
6.5.2 加載數據 159
6.5.3 創(chuàng)建數據集 159
6.5.4 定義模型 159
6.5.5 定義輸入函數 160
6.5.6 將模型轉換為Estimator 160
6.5.7 模型訓練 161
6.5.8 模型評價 161
6.5.9 項目源碼 161
6.6 為預訓練模型定義Estimators 163
6.6.1 創(chuàng)建項目 163
6.6.2 導入VGG16 163
6.6.3 創(chuàng)建自定義模型 163
6.6.4 編譯模型 165
6.6.5 創(chuàng)建Estimator 165
6.6.6 處理數據 165
6.6.7 訓練、評價 166
6.6.8 項目源碼 166
總結 167
第7章 文本生成 169
7.1 循環(huán)神經網絡 170
7.1.1 樸素RNN 170
7.1.2 梯度消失和梯度爆炸 171
7.1.3 LSTM(一個特例) 171
7.2 文本生成 174
7.2.1 模型訓練 174
7.2.2 預測 175
7.2.3 模型定義 176
7.3 生成新生兒名字 176
7.3.1 創(chuàng)建項目 176
7.3.2 下載文本 177
7.3.3 處理文本 177
7.3.4 定義模型 180
7.3.5 編譯 181
7.3.6 創(chuàng)建checkpoints 182
7.3.7 訓練 182
7.3.8 預測 182
7.3.9 項目源碼-TextGeneration BabyNames 184
7.3.10 保存、重用模型 188
7.4 高級文本生成 188
7.4.1 創(chuàng)建項目 189
7.4.2 加載文本 189
7.4.3 處理數據 190
7.4.4 定義模型 191
7.4.5 創(chuàng)建checkpoints 191
7.4.6 自定義回調類 192
7.4.7 模型訓練 193
7.4.8 結果 193
7.4.9 斷點續(xù)訓練 194
7.4.10 過程觀察 195
7.4.11 項目源碼 196
7.5 進一步工作 199
總結 199
第8章 語言翻譯 200
8.1 sequence-to-sequence 模型 200
8.1.1 編碼器、解碼器 201
8.1.2 Seq2seq模型的缺點 203
8.2 注意力模型 203
8.3 英語翻譯為西班牙語 204
8.3.1 創(chuàng)建項目 204
8.3.2 下載數據集 205
8.3.3 創(chuàng)建數據集 205
8.3.4 數據預處理 207
8.3.5 GloVe詞嵌入 212
8.3.6 定義編碼器 214
8.3.7 定義解碼器 215
8.3.8 注意力網絡 216
8.3.9 定義模型 221
8.3.10 模型訓練 222
8.3.11 預測 222
8.3.12 項目源碼 229
總結 237
第9章 自然語言理解 238
9.1 Transformer簡介 238
9.2 Transformer詳解 239
9.2.1 下載原始數據 240
9.2.2 創(chuàng)建數據集 240
9.2.3 數據預處理 240
9.2.4 構建語料庫 240
9.2.5 準備訓練集數據 243
9.2.6 Transformer模型 244
9.2.7 多頭注意力(機制) 245
9.2.8 Scaled Dot-Product 注意力模塊 248
9.2.9 編碼器結構 249
9.2.10 編碼器 252
9.2.11 解碼器結構 254
9.2.12 定義解碼器 257
9.2.13 Transformer模型 259
9.2.14 創(chuàng)建訓練模型 261
9.2.15 損失函數 261
9.2.16 優(yōu)化器 262
9.2.17 編譯 262
9.2.18 訓練 262
9.2.19 預測 263
9.2.20 測試 263
9.2.21 項目源碼 264
9.3 下一步是什么 276
總結 276
第10章 圖像描述 278
10.1 項目簡介 280
10.2 創(chuàng)建項目 280
10.3 下載數據 280
10.4 解析Token文件 282
10.4.1 加載數據 282
10.4.2 創(chuàng)建列表 283
10.5 加載InceptionV3模型 284
10.6 準備數據集 285
10.7 提取特征 285
10.8 創(chuàng)建詞匯表 286
10.9 創(chuàng)建輸入序列 286
10.10 創(chuàng)建訓練數據集 287
10.11 創(chuàng)建模型 288
10.12 創(chuàng)建編碼器 288
10.13 創(chuàng)建解碼器 288
10.13.1 Bahdanau注意力機制 289
10.13.2 解碼器功能 289
10.13.3 解碼器初始化 289
10.13.4 解碼器調用方法 290
10.13.5 注意力得分 290
10.13.6 注意力權重 290
10.13.7 上下文向量 291
10.13.8 解碼器實現 291
10.14 編碼器、解碼器實例化 294
10.15 定義優(yōu)化器和損失函數 294
10.16 創(chuàng)建checkpoints 296
10.17 訓練函數 297
10.18 模型訓練 298
10.19 模型預測 298
10.20 項目源碼 301
總結 310
第11章 時間序列預測 311
11.1 時間序列預測簡介 311
11.1.1 什么是時間序列預測 311
11.1.2 預測中的問題 312
11.1.3 時間序列組成 312
11.1.4 單變量與多變量 312
11.2 單變量時間序列分析 313
11.2.1 創(chuàng)建項目 313
11.2.2 準備數據 313
11.2.3 創(chuàng)建訓練集和測試集 316
11.2.4 創(chuàng)建輸入張量 319
11.2.5 構建模型 320
11.2.6 編譯和訓練 320
11.2.7 評估 320
11.2.8 預測下一個數據點 322
11.2.9 預測數據點區(qū)間 323
11.2.10 項目源碼 325
11.3 多變量時間序列分析 330
11.3.1 創(chuàng)建項目 330
11.3.2 準備數據 331
11.3.3 檢查平穩(wěn)性 331
11.3.4 探索數據 332
11.3.5 準備數據 333
11.3.6 創(chuàng)建模型 335
11.3.7 訓練 335
11.3.8 評估 335
11.3.9 預測未來點 336
11.3.10 預測數據點區(qū)間 337
11.3.11 項目源碼 339
總結 343
第12章 風格遷移 344
12.1 快速風格遷移 345
12.1.1 創(chuàng)建項目 345
12.1.2 下載圖像 345
12.1.3 準備模型輸入圖像 347
12.1.4 執(zhí)行風格遷移 348
12.1.5 顯示輸出 348
12.1.6 更多結果 348
12.1.7 項目源碼 350
12.2 自定義風格遷移 351
12.2.1 VGG16結構 352
12.2.2 創(chuàng)建項目 352
12.2.3 下載圖像 353
12.2.4 顯示圖像 354
12.2.5 圖像預處理 354
12.2.6 構建模型 355
12.2.7 內容損失 357
12.2.8 風格損失 357
12.2.9 全變分損失 357
12.2.10 計算內容和風格損失 358
12.2.11 Evaluator類 359
12.2.12 生成輸出圖像 359
12.2.13 顯示圖像 360
12.2.14 項目源碼 361
總結 365
第13章 圖像生成 366
13.1 GAN(生成對抗網絡) 366
13.2 GAN如何工作 366
13.3 生成器 367
13.4 判別器 367
13.5 數學公式 368
13.6 數字生成 369
13.6.1 創(chuàng)建項目 369
13.6.2 加載數據集 369
13.6.3 準備數據集 370
13.6.4 定義生成器模型 370
13.6.5 測試生成器 372
13.6.6 定義判別器模型 373
13.6.7 測試判別器 374
13.6.8 定義損失函數 375
13.6.9 定義新訓練函數 376
13.6.10 項目源碼 380
13.7 字母生成 385
13.7.1 下載數據 385
13.7.2 創(chuàng)建單字母數據集 385
13.7.3 輸出結果 386
13.7.4 項目源碼 387
13.8 印刷體到手寫體 392
13.9 生成彩色卡通圖像 392
13.9.1 下載數據集 392
13.9.2 創(chuàng)建數據集 392
13.9.3 顯示圖像 393
13.9.4 輸出結果 394
13.9.5 項目源碼 394
總結 400
第14章 圖像轉換 401
14.1 自動編碼器 401
14.2 色彩空間 402
14.3 網絡配置 402
14.3.1 Vanilla模型 403
14.3.2 Merged模型 403
14.3.3 使用預訓練的Merged模型 403
14.4 自動編碼器 404
14.4.1 加載數據 405
14.4.2 創(chuàng)建訓練、測試數據集 406
14.4.3 準備訓練數據 406
14.4.4 定義模型 407
14.4.5 模型訓練 410
14.4.6 測試 410
14.4.7 未知圖像預測 412
14.4.8 項目源碼 413
14.5 編碼器的預訓練模型 418
14.5.1 項目簡介 418
14.5.2 定義模型 418
14.5.3 提取特征 418
14.5.4 定義網絡 419
14.5.5 模型訓練 420
14.5.6 預測 421
14.5.7 未知圖像預測 421
14.5.8 項目源碼 422
總結 426