●對本書的贊譽
前言
如何使用本書
資源與支持
主要符號表
第1 章 深度學習簡介1
1.1起源2
1.2發展4
1.3成功案例6
1.4特點7
小結8
練習8
第2 章 預備知識9
2.1獲取和運行本書的代碼9
2.1.1獲取代碼並安裝運行環境9
2.1.2更新代碼和運行環境11
2.1.3使用GPU版的MXNet11
小結12
練習12
2.2數據操作12
2.2.1創建NDArray12
2.2.2運算14
2.2.3廣播機制16
2.2.4索引17
2.2.5運算的內存開銷17
2.2.6NDArray和NumPy相互變換18
小結19
練習19
2.3自動求梯度19
2.3.1簡單例子19
2.3.2訓練模式和預測模式20
2.3.3對Python控制流求梯度20
小結21
練習21
2.4查閱文檔21
2.4.1查找模塊裡的所有函數和類21
2.4.2查找特定函數和類的使用22
2.4.3在MXNet網站上查閱23
小結24
練習24
第3章 深度學習基礎25
3.1線性回歸25
3.1.1線性回歸的基本要素25
3.1.2線性回歸的表示方法28
小結30
練習30
3.2線性回歸的從零開始實現30
3.2.1生成數據集30
3.2.2讀取數據集32
3.2.3初始化模型參數32
3.2.4定義模型33
3.2.5定義損失函數33
3.2.6定義優化算法33
3.2.7訓練模型33
小結34
練習34
3.3線性回歸的簡潔實現35
3.3.1生成數據集35
3.3.2讀取數據集35
3.3.3定義模型36
3.3.4初始化模型參數36
3.3.5定義損失函數37
3.3.6定義優化算法37
3.3.7訓練模型37
小結38
練習38
3.4softmax回歸38
3.4.1分類問題38
3.4.2softmax回歸模型39
3.4.3單樣本分類的矢量計算表達式40
3.4.4小批量樣本分類的矢量計算表達式40
3.4.5交叉熵損失函數41
3.4.6模型預測及評價42
小結42
練習42
3.5圖像分類數據集(Fashion-MNIST)42
3.5.1獲取數據集42
3.5.2讀取小批量44
小結45
練習45
3.6softmax回歸的從零開始實現45
3.6.1讀取數據集45
3.6.2初始化模型參數45
3.6.3實現softmax運算46
3.6.4定義模型46
3.6.5定義損失函數47
3.6.6計算分類準確率47
3.6.7訓練模型48
3.6.8預測48
小結49
練習49
3.7softmax回歸的簡潔實現49
3.7.1讀取數據集49
3.7.2定義和初始化模型50
3.7.3softmax和交叉熵損失函數50
3.7.4定義優化算法50
3.7.5訓練模型50
小結50
練習50
3.8多層感知機51
3.8.1隱藏層51
3.8.2激活函數52
3.8.3多層感知機55
小結55
練習55
3.9多層感知機的從零開始實現56
3.9.1讀取數據集56
3.9.2定義模型參數56
3.9.3定義激活函數56
3.9.4定義模型56
3.9.5定義損失函數57
3.9.6訓練模型57
小結57
練習57
3.10多層感知機的簡潔實現57
3.10.1定義模型58
3.10.2訓練模型58
小結58
練習58
3.11模型選擇、欠擬合和過擬合58
3.11.1訓練誤差和泛化誤差59
3.11.2模型選擇59
3.11.3欠擬合和過擬合60
3.11.4多項式函數擬合實驗61
小結65
練習65
3.12權重衰減65
3.12.1方法65
3.12.2高維線性回歸實驗66
3.12.3從零開始實現66
3.12.4簡潔實現68
小結70
練習70
3.13丟棄法70
3.13.1方法70
3.13.2從零開始實現71
3.13.3簡潔實現73
小結74
練習74
3.14正向傳播、反向傳播和計算圖74
3.14.1正向傳播74
3.14.2正向傳播的計算圖75
3.14.3反向傳播75
3.14.4訓練深度學習模型76
小結77
練習77
3.15數值穩定性和模型初始化77
3.15.1衰減和爆炸77
3.15.2隨機初始化模型參數78
小結78
練習79
3.16實戰Kaggle比賽:房價預測79
3.16.1Kaggle比賽79
3.16.2讀取數據集80
3.16.3預處理數據集81
3.16.4訓練模型82
3.16.5k 折交叉驗證82
3.16.6模型選擇83
3.16.7預測並在Kaggle提交結果84
小結85
練習85
第4章 深度學習計算86
4.1模型構造86
4.1.1繼承Block類來構造模型86
4.1.2Sequential類繼承自Block類87
4.1.3構造復雜的模型88
小結89
練習90
4.2模型參數的訪問、初始化和共享90
4.2.1訪問模型參數90
4.2.2初始化模型參數92
4.2.3自定義初始化方法93
4.2.4共享模型參數94
小結94
練習94
4.3模型參數的延後初始化95
4.3.1延後初始化95
4.3.2避免延後初始化96
小結96
練習97
4.4自定義層97
4.4.1不含模型參數的自定義層97
4.4.2含模型參數的自定義層98
小結99
練習99
4.5讀取和存儲99
4.5.1讀寫NDArray99
4.5.2讀寫Gluon模型的參數100
小結101
練習101
4.6GPU計算101
4.6.1計算設備102
4.6.2NDArray的GPU計算102
4.6.3Gluon的GPU計算104
小結105
練習105
第5章 卷積神經網絡106
5.1二維卷積層106
5.1.1二維互相關運算106
5.1.2二維卷積層107
5.1.3圖像中物體邊緣檢測108
5.1.4通過數據學習核數組109
5.1.5互相關運算和卷積運算109
5.1.6特征圖和感受野110
小結110
練習110
5.2填充和步幅111
5.2.1填充111
5.2.2步幅112
小結113
練習113
5.3多輸入通道和多輸出通道114
5.3.1多輸入通道114
5.3.2多輸出通道115
5.3.31×1卷積層116
小結117
練習117
5.4池化層117
5.4.1二維優選池化層和平均池化層117
5.4.2填充和步幅119
5.4.3多通道120
小結120
練習121
5.5卷積神經網絡(LeNet)121
5.5.1LeNet模型121
5.5.2訓練模型122
小結124
練習124
5.6深度卷積神經網絡(AlexNet)124
5.6.1學習特征表示125
5.6.2AlexNet126
5.6.3讀取數據集127
5.6.4訓練模型128
小結128
練習129
5.7使素的網絡(VGG)129
5.7.1VGG塊129
5.7.2VGG網絡129
5.7.3訓練模型130
小結131
練習131
5.8網絡中的網絡(NiN)131
5.8.1NiN塊131
5.8.2NiN模型132
5.8.3訓練模型133
小結134
練習134
5.9含並行連結的網絡(GoogLeNet)134
5.9.1Inception塊134
5.9.2GoogLeNet模型135
5.9.3訓練模型137
小結137
練習137
5.10批量歸一化138
5.10.1批量歸一化層138
5.10.2從零開始實現139
5.10.3使用批量歸一化層的LeNet140
5.10.4簡潔實現141
小結142
練習142
5.11殘差網絡(ResNet)143
5.11.1殘差塊143
5.11.2ResNet模型145
5.11.3訓練模型146
小結146
練習146
5.12稠密連接網絡(DenseNet)147
5.12.1稠密塊147
5.12.2過渡層148
5.12.3DenseNet模型148
5.12.4訓練模型149
小結149
練習149
第6章 循環神經網絡150
6.1語言模型150
6.1.1語言模型的計算151
6.1.語法151
小結152
練習152
6.2循環神經網絡152
6.2.1不含隱藏狀態的神經網絡152
6.2.2含隱藏狀態的循環神經網絡152
6.2.3應用:基於字符級循環神經網絡的語言模型154
小結155
練習155
6.3語言模型數據集(歌詞)155
6.3.1讀取數據集155
6.3.2建立字符索引156
6.3.3時序數據的采樣156
小結158
練習159
6.4循環神經網絡的從零開始實現159
6.4.1one-hot向量159
6.4.2初始化模型參數160
6.4.3定義模型160
6.4.4定義預測函數161
6.4.5裁剪梯度161
6.4.6困惑度162
6.4.7定義模型訓練函數162
6.4.8訓練模型並創作歌詞163
小結164
練習164
6.5循環神經網絡的簡潔實現165
6.5.1定義模型165
6.5.2訓練模型166
小結168
練習168
6.6通過時間反向傳播168
6.6.1定義模型168
6.6.2模型計算圖169
6.6.3方法169
小結170
練習170
6.7門控(GRU)170
6.7.1門控171
6.7.2讀取數據集173
6.7.3從零開始實現173
6.7.4簡潔實現175
小結176
練習176
6.8長短期記憶(LSTM)176
6.8.1長短期記憶176
6.8.2讀取數據集179
6.8.3從零開始實現179
6.8.4簡潔實現181
小結181
練習182
6.9深度循環神經網絡182
小結183
練習183
6.10雙向循環神經網絡183
小結184
練習184
第7章 優化算法185
7.1優化與深度學習185
7.1.1優化與深度學習的關繫185
7.1.2優化在深度學習中的挑戰186
小結188
練習189
7.2梯度下降和隨機梯度下降189
7.2.1一維梯度下降189
7.2.2學習率190
7.2.3多維梯度下降191
7.2.4隨機梯度下降193
小結194
練習194
7.3小批量隨機梯度下降194
7.3.1讀取數據集195
7.3.2從零開始實現196
7.3.3簡潔實現198
小結199
練習199
7.4動量法200
7.4.1梯度下降的問題200
7.4.2動量法201
7.4.3從零開始實現203
7.4.4簡潔實現205
小結205
練習205
7.5AdaGrad算法206
7.5.1算法206
7.5.2特點206
7.5.3從零開始實現208
7.5.4簡潔實現209
小結209
練習209
7.6RMSProp算法209
7.6.1算法210
7.6.2從零開始實現211
7.6.3簡潔實現212
小結212
練習212
7.7AdaDelta算法212
7.7.1算法212
7.7.2從零開始實現213
7.7.3簡潔實現214
小結214
練習214
7.8Adam算法215
7.8.1算法215
7.8.2從零開始實現216
7.8.3簡潔實現216
小結217
練習217
第8章 計算性能218
8.1命令式和符號式混合編程218
8.1.1混合式編程取兩者之長220
8.1.2使用HybridSequential類構造模型220
8.1.3使用HybridBlock類構造模型222
小結224
練習224
8.2異步計算224
8.2.1MXNet中的異步計算224
8.2.2用同步函數讓前端等待計算結果226
8.2.3使用異步計算提升計算性能226
8.2.4異步計算對內存的影響227
小結229
練習229
8.3自動並行計算229
8.3.1CPU和GPU的並行計算230
8.3.2計算和通信的並行計算231
小結231
練習231
8.4多GPU計算232
8.4.1數據並行232
8.4.2定義模型233
8.4.3多GPU之間同步數據234
8.4.4單個小批量上的多GPU訓練236
8.4.5定義訓練函數236
8.4.6多GPU訓練實驗237
小結237
練習237
8.5多GPU計算的簡潔實現237
8.5.1多GPU上初始化模型參數238
8.5.2多GPU訓練模型239
小結241
練習241
第9章 計算機視覺242
9.1圖像增廣242
9.1.1常用的圖像增廣方法243
9.1.2使用圖像增廣訓練模型246
小結250
練習250
9.2微調250
熱狗識別251
小結255
練習255
9.3目標檢測和邊界框255
邊界框256
小結257
練習257
9.4錨框257
9.4.1生成多個錨框257
9.4.2交並比259
9.4.3標注訓練集的錨框260
9.4.4輸出預測邊界框263
小結265
練習265
9.5多尺度目標檢測265
小結268
練習268
9.6目標檢測數據集(皮卡丘)268
9.6.1獲取數據集269
9.6.2讀取數據集269
9.6.3圖示數據270
小結270
練習271
9.7單發多框檢測(SSD)271
9.7.1定義模型271
9.7.2訓練模型275
9.7.3預測目標277
小結278
練習278
9.8區域卷積神經網絡(R-CNN)繫列280
9.8.1R-CNN280
9.8.2Fast R-CNN281
9.8.3Faster R-CNN283
9.8.4Mask R-CNN284
小結285
練習285
9.9語義分割和數據集285
9.9.1圖像分割和實例分割285
9.9.2Pascal VOC2012語義分割數據集286
小結290
練習290
9.10全卷積網絡(FCN)290
9.10.1轉置卷積層291
9.10.2構造模型292
9.10.3初始化轉置卷積層294
9.10.4讀取數據集295
9.10.5訓練模型296
9.10.6預測像素類別296
小結297
練習297
9.11樣式遷移298
9.11.1方法298
9.11.2讀取內容圖像和樣式圖像299
9.11.3預處理和後處理圖像300
9.11.4抽取特征301
9.11.5定義損失函數302
9.11.6創建和初始化合成圖像303
9.11.7訓練模型304
小結306
練習306
9.12實戰Kaggle比賽:圖像
分類(CIFAR-10)306
9.12.1獲取和整理數據集307
9.12.2圖像增廣310
9.12.3讀取數據集310
9.12.4定義模型311
9.12.5定義訓練函數312
9.12.6訓練模型312
9.12.7對測試集分類並在Kaggle
提交結果313
小結313
練習313
9.13實戰Kaggle比賽:狗的品種
識別(ImageNetDogs)314
9.13.1獲取和整理數據集315
9.13.2圖像增廣316
9.13.3讀取數據集317
9.13.4定義模型318
9.13.5定義訓練函數318
9.13.6訓練模型319
9.13.7對測試集分類並在Kaggle提交結果319
小結320
練習320
第10 章 自然語言處理321
10.1詞嵌入(word2vec)321
10.1.1為何不采用one-hot向量321
10.1.2跳字模型322
10.1.3連續詞袋模型323
小結325
練習325
10.2近似訓練325
10.2.1負采樣325
10.2.2層序softmax326
小結327
練習328
10.3word2vec的實現328
10.3.1預處理數據集328
10.3.2負采樣331
10.3.3讀取數據集331
10.3.4跳字模型332
10.3.5訓練模型333
10.3.6應用詞嵌入模型335
小結336
練習336
10.4子詞嵌入(fastText)336
小結337
練習337
10.5全局向量的詞嵌入(GloVe)337
10.5.1GloVe模型338
10.5.2從條件概率比值理解GloVe模型339
小結340
練習340
10.6求近義詞和類比詞340
10.6.1使用預訓練的詞向量340
10.6.2應用預訓練詞向量341
小結343
練習343
10.7文本情感分類:使用循環神經網絡343
10.7.1文本情感分類數據集343
10.7.2使用循環神經網絡的模型345
小結347
練習347
10.8文本情感分類:使用卷積神經網絡(textCNN)347
10.8.1一維卷積層348
10.8.2時序優選池化層349
10.8.3讀取和預處理IMDb數據集350
10.8.4textCNN模型350
小結353
練習353
10.9編碼器-解碼器(seq2seq)353
10.9.1編碼器354
10.9.2解碼器354
10.9.3訓練模型355
小結355
練習355
10.10束搜索355
10.10.1貪婪搜索356
10.10.2窮舉搜索357
10.10.3束搜索357
小結358
練習358
10.11注意力機制358
10.11.1計算背景變量359
10.11.2更新隱藏狀態360
10.11.3發展361
小結361
練習361
10.12機器翻譯361
10.12.1讀取和預處理數據集361
10.12.2含注意力機制的編碼器-解碼器363
10.12.3訓練模型365
10.12.4預測不定長的序列367
10.12.5評價翻譯結果367
小結369
練習369
附錄A數學基礎370
附錄B使用 Jupyter 記事本376
附錄C使用 AWS 運行代碼381
附錄DGPU 購買指南388
附錄E如何為本書做貢獻391
附錄Fd2lzh 包索引395
附錄G中英文術語對照表397
參考文獻402
索引407
本書旨在向讀者交付有關深度學習的交互式學習體驗。書中不僅闡述深度學習的算法原理,還演示它們的實現和運行。與傳統圖書不同,本書的每一節都是一個可以下載並運行的 Jupyter記事本,它將文字、公式、圖像、代碼和運行結果結合在了一起。此外,讀者還可以訪問並參與書中內容的討論。全書的內容分為3個部分:第一部分介紹深度學習的背景,提供預備知識,並包括深度學習最基礎的概念和技術;第二部分描述深度學習計算的重要組成部分,還解釋近年來令深度學習在多個領域大獲成功的卷積神經網絡和循環神經網絡;第三部分評價優化算法,檢驗影響深度學習計算性能的重要因素,並分別列舉深度學習在計算機視覺和自然語言處理中的重要應用。本書同時覆蓋深度學習的方法和實踐,主要面向在校大學生、技術人員和研究人員。閱讀本書需要讀者了解基本的Python編程或附錄中描述的線性代數、微分和概率基礎。