本書首先從深度學(xué)習(xí)的原理出發(fā),介紹如何把深度學(xué)習(xí)的理論轉(zhuǎn)換為PyTorch代碼,然后介紹如何在計算機上運行這些代碼。作為一本面向初中級讀者的技術(shù)類圖書,本書在前面所述內(nèi)容的基礎(chǔ)上,還介紹了學(xué)術(shù)界前沿的一系列實例,以及PyTorch的源代碼結(jié)構(gòu),以期讀者能夠融會貫通深度學(xué)習(xí)框架的設(shè)計和應(yīng)用的思想。
張校捷,英偉達(dá)(NVIDIA)資深深度學(xué)習(xí)架構(gòu)工程師,負(fù)責(zé)基于CUDA的深度學(xué)習(xí)框架的優(yōu)化。目前主要使用的技術(shù)棧是作為深度學(xué)習(xí)框架后端的C/C++/CUDA,以及深度學(xué)習(xí)框架前端的Python,對主流的深度學(xué)習(xí)框架如PyTorch和TensorFlow比較熟悉,并精通其在計算機視覺(CV)和自然語言處理(NLP)方面的具體應(yīng)用。作者多次作為專題演講嘉賓,受邀參加CSDN主辦的技術(shù)大會。
第1章 深度學(xué)習(xí)概念簡介 1
1.1 深度學(xué)習(xí)的歷史 1
1.1.1 深度學(xué)習(xí)的發(fā)展過程 1
1.1.2 深度學(xué)習(xí)在計算機視覺領(lǐng)域的發(fā)展 3
1.1.3 深度學(xué)習(xí)在自然語言處理和其他領(lǐng)域的發(fā)展 6
1.2 機器學(xué)習(xí)基本概念 7
1.2.1 機器學(xué)習(xí)的主要任務(wù) 8
1.2.2 機器模型的類型 9
1.2.3 損失函數(shù)以及模型的擬合 11
1.3 深度學(xué)習(xí)基本概念 14
1.3.1 向量、矩陣和張量及其運算 15
1.3.2 張量的存儲 19
1.3.3 神經(jīng)元的概念 19
1.4 輸入數(shù)據(jù)的表示方式 20
1.4.1 圖像數(shù)據(jù)的表示方式 20
1.4.2 文本數(shù)據(jù)的表示方式 22
1.4.3 音頻數(shù)據(jù)的表示方式 23
1.5 線性變換和激活函數(shù) 26
1.5.1 全連接線性變換 26
1.5.2 卷積線性變換 28
1.5.3 激活函數(shù) 29
1.6 鏈?zhǔn)角髮?dǎo)法則和反向傳播 32
1.6.1 基于鏈?zhǔn)角髮?dǎo)的梯度計算 32
1.6.2 激活函數(shù)的導(dǎo)數(shù) 34
1.6.3 數(shù)值梯度 36
1.7 損失函數(shù)和優(yōu)化器 37
1.7.1 常用的損失函數(shù) 37
1.7.2 基于梯度的優(yōu)化器 38
1.7.3 學(xué)習(xí)率衰減和權(quán)重衰減 42
1.8 本章總結(jié) 43
第2章 PyTorch深度學(xué)習(xí)框架簡介 44
2.1 深度學(xué)習(xí)框架簡介 44
2.1.1 深度學(xué)習(xí)框架中的張量 44
2.1.2 深度學(xué)習(xí)框架中的計算圖 45
2.1.3 深度學(xué)習(xí)框架中的自動求導(dǎo)和反向傳播 46
2.2 PyTorch框架歷史和特性更迭 47
2.3 PyTorch的安裝過程 49
2.4 PyTorch包的結(jié)構(gòu) 52
2.4.1 PyTorch的主要模塊 52
2.4.2 PyTorch的輔助工具模塊 57
2.5 PyTorch中張量的創(chuàng)建和維度的操作 59
2.5.1 張量的數(shù)據(jù)類型 59
2.5.2 張量的創(chuàng)建方式 61
2.5.3 張量的存儲設(shè)備 65
2.5.4 和張量維度相關(guān)的方法 66
2.5.5 張量的索引和切片 69
2.6 PyTorch中張量的運算 70
2.6.1 涉及單個張量的函數(shù)運算 70
2.6.2 涉及多個張量的函數(shù)運算 72
2.6.3 張量的極值和排序 73
2.6.4 矩陣的乘法和張量的縮并 75
2.6.5 張量的拼接和分割 77
2.6.6 張量維度的擴增和壓縮 79
2.6.7 張量的廣播 80
2.7 PyTorch中的模塊簡介 82
2.7.1 PyTorch中的模塊類 82
2.7.2 基于模塊類的簡單線性回歸類 82
2.7.3 線性回歸類的實例化和方法調(diào)用 84
2.8 PyTorch的計算圖和自動求導(dǎo)機制 87
2.8.1 自動求導(dǎo)機制簡介 87
2.8.2 自動求導(dǎo)機制實例 88
2.8.3 梯度函數(shù)的使用 89
2.8.4 計算圖生成的控制 89
2.9 PyTorch的損失函數(shù)和優(yōu)化器 90
2.9.1 損失函數(shù) 90
2.9.2 優(yōu)化器 92
2.10 PyTorch中數(shù)據(jù)的輸入和預(yù)處理 96
2.10.1 數(shù)據(jù)載入類 96
2.10.2 映射類型的數(shù)據(jù)集 97
2.10.3 torchvision工具包的使用 97
2.10.4 可迭代類型的數(shù)據(jù)集 100
2.11 PyTorch模型的保存和加載 101
2.11.1 模塊和張量的序列化及反序列化 101
2.11.2 模塊狀態(tài)字典的保存和載入 104
2.12 PyTorch數(shù)據(jù)的可視化 105
2.12.1 TensorBoard的安裝和使用 105
2.12.2 TensorBoard常用的可視化數(shù)據(jù)類型 108
2.13 PyTorch模型的并行化 110
2.13.1 PyTorch的數(shù)據(jù)并行化 111
2.13.1 PyTorch的分布式數(shù)據(jù)并行化 112
2.14 本章總結(jié) 116
第3章 PyTorch計算機視覺模塊 119
3.1 計算機視覺基本概念 119
3.1.1 計算機視覺任務(wù)簡介 119
3.1.2 基礎(chǔ)圖像變換操作 120
3.1.3 圖像特征提取 123
3.1.4 濾波器的概念 125
3.2 線性層 126
3.3 卷積層 128
3.4 歸一化層 137
3.5 池化層 144
3.6 丟棄層 149
3.7 模塊的組合 151
3.8 特征提取 153
3.9 模型初始化 157
3.10 常見模型結(jié)構(gòu) 160
3.10.1 InceptionNet的結(jié)構(gòu) 161
3.10.2 ResNet的結(jié)構(gòu) 164
3.11 本章總結(jié) 167
第4章 PyTorch機器視覺案例 169
4.1 常見計算機視覺任務(wù)和數(shù)據(jù)集 169
4.1.1 圖像分類任務(wù)簡介 169
4.1.2 目標(biāo)檢測任務(wù)簡介 170
4.1.3 圖像分割任務(wù)簡介 171
4.1.4 圖像生成任務(wù)簡介 172
4.1.5 常用深度學(xué)習(xí)公開數(shù)據(jù)集 173
4.2 手寫數(shù)字識別:LeNet 176
4.2.1 深度學(xué)習(xí)工程的結(jié)構(gòu) 176
4.2.2 MNIST數(shù)據(jù)集的準(zhǔn)備 177
4.2.3 LeNet網(wǎng)絡(luò)的搭建 179
4.2.4 LeNet網(wǎng)絡(luò)的訓(xùn)練和測試 182
4.2.5 超參數(shù)的修改和argparse庫的使用 185
4.3 圖像分類:ResNet和InceptionNet 187
4.3.1 ImageNet數(shù)據(jù)集的使用 187
4.3.2 ResNet網(wǎng)絡(luò)的搭建 189
4.3.3 InceptionNet網(wǎng)絡(luò)的搭建 194
4.4 目標(biāo)檢測:SSD 204
4.4.1 SSD的骨架網(wǎng)絡(luò)結(jié)構(gòu) 204
4.4.2 SSD的特征提取網(wǎng)絡(luò)結(jié)構(gòu) 205
4.4.3 錨點框和選框預(yù)測 210
4.4.4 輸入數(shù)據(jù)的預(yù)處理 214
4.4.5 損失函數(shù)的計算 216
4.4.6 模型的預(yù)測和非極大抑制算法 218
4.5 圖像分割:FCN和U-Net 219
4.5.1 FCN網(wǎng)絡(luò)結(jié)構(gòu) 220
4.5.2 U-Net網(wǎng)絡(luò)結(jié)構(gòu) 225
4.6 圖像風(fēng)格遷移 229
4.6.1 圖像風(fēng)格遷移算法介紹 229
4.6.2 輸入圖像的特征提取 231
4.6.3 輸入圖像的優(yōu)化 234
4.7 生成模型:VAE和GAN 236
4.7.1 變分自編碼器介紹 237
4.7.2 變分自編碼器的實現(xiàn) 239
4.7.3 生成對抗網(wǎng)絡(luò)介紹 242
4.7.4 生成對抗網(wǎng)絡(luò)的實現(xiàn) 244
4.8 本章總結(jié) 249
第5章 PyTorch自然語言處理模塊 251
5.1 自然語言處理基本概念 251
5.1.1 機器翻譯相關(guān)的自然語言處理研究 251
5.1.2 其他領(lǐng)域的自然語言處理研究 253
5.1.3 自然語言處理中特征提取的預(yù)處理 254
5.1.4 自然語言處理中詞頻特征的計算方法 256
5.1.5 自然語言處理中TF-IDF特征的計算方法 258
5.2 詞嵌入層 261
5.3 循環(huán)神經(jīng)網(wǎng)絡(luò)層:GRU和LSTM 267
5.3.1 簡單循環(huán)神經(jīng)網(wǎng)絡(luò) 267
5.3.2 長短時記憶網(wǎng)絡(luò)(LSTM) 269
5.3.3 門控循環(huán)單元(GRU) 272
5.4 注意力機制 280
5.5 自注意力機制 284
5.5.1 循環(huán)神經(jīng)網(wǎng)絡(luò)的問題 284
5.5.2 自注意力機制的基礎(chǔ)結(jié)構(gòu) 285
5.5.3 使用自注意力機制來構(gòu)建Seq2Seq模型 288
5.5.4 PyTorch中自注意力機制的模塊 290
5.5.5 Pytorch中的Transformer模塊 292
5.6 本章總結(jié) 293
第6章 PyTorch自然語言處理案例 295
6.1 word2vec算法訓(xùn)練詞向量 295
6.1.1 單詞表的創(chuàng)建 295
6.1.2 word2vec算法的實現(xiàn) 299
6.1.3 word2vec算法的特性 301
6.2 基于循環(huán)神經(jīng)網(wǎng)絡(luò)的情感分析 302
6.3 基于循環(huán)神經(jīng)網(wǎng)絡(luò)的語言模型 305
6.3.1 語言模型簡介 305
6.3.2 語言模型的代碼 308
6.4 Seq2Seq模型及其應(yīng)用 311
6.4.1 Seq2Seq模型的結(jié)構(gòu) 311
6.4.2 Seq2Seq模型編碼器的代碼 312
6.4.3 Seq2Seq模型注意力機制的代碼 315
6.4.4 Seq2Seq模型解碼器的代碼 317
6.5 BERT模型及其應(yīng)用 321
6.5.1 BERT模型的結(jié)構(gòu) 321
6.5.2 BERT模型的訓(xùn)練方法 325
6.5.3 BERT模型的微調(diào) 327
6.6 本章總結(jié) 329
第7章 其他重要模型 330
7.1 基于寬深模型的推薦系統(tǒng) 330
7.1.1 推薦系統(tǒng)介紹 330
7.1.2 寬深模型介紹 331
7.2 DeepSpeech模型和CTC損失函數(shù) 335
7.2.1 語音識別模型介紹 335
7.2.2 CTC損失函數(shù) 337
7.3 使用Tacotron和WaveNet進行語音合成 342
7.3.1 Tacotron模型中基于Seq2Seq的梅爾過濾器特征合成 343
7.3.2 Tacotron模型的代碼 344
7.3.3 WaveNet模型介紹 352
7.3.4 因果卷積模塊介紹 355
7.3.5 因果卷積模塊的代碼 357
7.3.6 WaveNet模型的代碼 358
7.4 基于DQN的強化學(xué)習(xí)算法 360
7.4.1 強化學(xué)習(xí)的基礎(chǔ)概念 361
7.4.2 強化學(xué)習(xí)的環(huán)境 362
7.4.3 DQN模型的原理 363
7.4.4 DQN模型及其訓(xùn)練過程 365
7.5 使用半精度浮點數(shù)訓(xùn)練模型 369
7.5.1 半精度浮點數(shù)的介紹 370
7.5.2 半精度模型的訓(xùn)練 371
7.5.3 apex擴展包的使用 372
7.6 本章總結(jié) 373
第8章 PyTorch高級應(yīng)用 375
8.1 PyTorch自定義激活函數(shù)和梯度 375
8.2 在PyTorch中編寫擴展 377
8.3 正向傳播和反向傳播的鉤子 385
8.4 PyTorch的靜態(tài)計算圖 388
8.5 靜態(tài)計算圖模型的保存和使用 393
8.6 本章總結(jié) 396
第9章 PyTorch源代碼解析 397
9.1 ATen張量計算庫簡介 397
9.2 C++的Python接口 400
9.3 csrc模塊簡介 404
9.4 autograd和自動求導(dǎo)機制 407
9.5 C10張量計算庫簡介 408
9.6 本章總結(jié) 409
參考文獻 410