內容簡介
《深入淺出PyTorch——從模型到源碼》介紹學術界和工業界常用的諸多熱門模型, 如SSD、FCN、GAN、LSTM和BERT等的PyTorch實現
圖書目錄
第1章 深度學習概念簡介 1
1.1 深度學習的歷史 1
1.1.1 深度學習的發展過程 1
1.1.2 深度學習在計算機視覺領域的發展 3
1.1.3 深度學習在自然語言處理和其他領域的發展 6
1.2 機器學習基本概念 7
1.2.1 機器學習的主要任務 8
1.2.2 機器模型的類型 9
1.2.3 損失函式以及模型的擬合 11
1.3 深度學習基本概念 14
1.3.1 向量、矩陣和張量及其運算 15
1.3.2 張量的存儲 19
1.3.3 神經元的概念 19
1.4 輸入數據的表示方式 20
1.4.1 圖像數據的表示方式 20
1.4.2 文本數據的表示方式 22
1.4.3 音頻數據的表示方式 23
1.5 線性變換和激活函式 26
1.5.1 全連線線性變換 26
1.5.2 卷積線性變換 28
1.5.3 激活函式 29
1.6 鏈式求導法則和反向傳播 32
1.6.1 基於鏈式求導的梯度計算 32
1.6.2 激活函式的導數 34
1.6.3 數值梯度 36
1.7 損失函式和最佳化器 37
1.7.1 常用的損失函式 37
1.7.2 基於梯度的最佳化器 38
1.7.3 學習率衰減和權重衰減 42
1.8 本章總結 43
第2章 PyTorch深度學習框架簡介 44
2.1 深度學習框架簡介 44
2.1.1 深度學習框架中的張量 44
2.1.2 深度學習框架中的計算圖 45
2.1.3 深度學習框架中的自動求導和反向傳播 46
2.2 PyTorch框架歷史和特性更迭 47
2.3 PyTorch的安裝過程 49
2.4 PyTorch包的結構 52
2.4.1 PyTorch的主要模組 52
2.4.2 PyTorch的輔助工具模組 57
2.5 PyTorch中張量的創建和維度的操作 59
2.5.1 張量的數據類型 59
2.5.2 張量的創建方式 61
2.5.3 張量的存儲設備 65
2.5.4 和張量維度相關的方法 66
2.5.5 張量的索引和切片 69
2.6 PyTorch中張量的運算 70
2.6.1 涉及單個張量的函式運算 70
2.6.2 涉及多個張量的函式運算 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 線性回歸類的實例化和方法調用 84
2.8 PyTorch的計算圖和自動求導機制 87
2.8.1 自動求導機制簡介 87
2.8.2 自動求導機制實例 88
2.8.3 梯度函式的使用 89
2.8.4 計算圖生成的控制 89
2.9 PyTorch的損失函式和最佳化器 90
2.9.1 損失函式 90
2.9.2 最佳化器 92
2.10 PyTorch中數據的輸入和預處理 96
2.10.1 數據載入類 96
2.10.2 映射類型的數據集 97
2.10.3 torchvision工具包的使用 97
2.10.4 可疊代類型的數據集 100
2.11 PyTorch模型的保存和載入 101
2.11.1 模組和張量的序列化及反序列化 101
2.11.2 模組狀態字典的保存和載入 104
2.12 PyTorch數據的可視化 105
2.12.1 TensorBoard的安裝和使用 105
2.12.2 TensorBoard常用的可視化數據類型 108
2.13 PyTorch模型的並行化 110
2.13.1 PyTorch的數據並行化 111
2.13.1 PyTorch的分散式數據並行化 112
2.14 本章總結 116
第3章 PyTorch計算機視覺模組 119
3.1 計算機視覺基本概念 119
3.1.1 計算機視覺任務簡介 119
3.1.2 基礎圖像變換操作 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 常見模型結構 160
3.10.1 InceptionNet的結構 161
3.10.2 ResNet的結構 164
3.11 本章總結 167
第4章 PyTorch機器視覺案例 169
4.1 常見計算機視覺任務和數據集 169
4.1.1 圖像分類任務簡介 169
4.1.2 目標檢測任務簡介 170
4.1.3 圖像分割任務簡介 171
4.1.4 圖像生成任務簡介 172
4.1.5 常用深度學習公開數據集 173
4.2 手寫數字識別:LeNet 176
4.2.1 深度學習工程的結構 176
4.2.2 MNIST數據集的準備 177
4.2.3 LeNet網路的搭建 179
4.2.4 LeNet網路的訓練和測試 182
4.2.5 超參數的修改和argparse庫的使用 185
4.3 圖像分類:ResNet和InceptionNet 187
4.3.1 ImageNet數據集的使用 187
4.3.2 ResNet網路的搭建 189
4.3.3 InceptionNet網路的搭建 194
4.4 目標檢測:SSD 204
4.4.1 SSD的骨架網路結構 204
4.4.2 SSD的特徵提取網路結構 205
4.4.3 錨點框和選框預測 210
4.4.4 輸入數據的預處理 214
4.4.5 損失函式的計算 216
4.4.6 模型的預測和非極大抑制算法 218
4.5 圖像分割:FCN和U-Net 219
4.5.1 FCN網路結構 220
4.5.2 U-Net網路結構 225
4.6 圖像風格遷移 229
4.6.1 圖像風格遷移算法介紹 229
4.6.2 輸入圖像的特徵提取 231
4.6.3 輸入圖像的最佳化 234
4.7 生成模型:VAE和GAN 236
4.7.1 變分自編碼器介紹 237
4.7.2 變分自編碼器的實現 239
4.7.3 生成對抗網路介紹 242
4.7.4 生成對抗網路的實現 244
4.8 本章總結 249
第5章 PyTorch自然語言處理模組 251
5.1 自然語言處理基本概念 251
5.1.1 機器翻譯相關的自然語言處理研究 251
5.1.2 其他領域的自然語言處理研究 253
5.1.3 自然語言處理中特徵提取的預處理 254
5.1.4 自然語言處理中詞頻特徵的計算方法 256
5.1.5 自然語言處理中TF-IDF特徵的計算方法 258
5.2 詞嵌入層 261
5.3 循環神經網路層:GRU和LSTM 267
5.3.1 簡單循環神經網路 267
5.3.2 長短時記憶網路(LSTM) 269
5.3.3 門控循環單元(GRU) 272
5.4 注意力機制 280
5.5 自注意力機制 284
5.5.1 循環神經網路的問題 284
5.5.2 自注意力機制的基礎結構 285
5.5.3 使用自注意力機制來構建Seq2Seq模型 288
5.5.4 PyTorch中自注意力機制的模組 290
5.5.5 Pytorch中的Transformer模組 292
5.6 本章總結 293
第6章 PyTorch自然語言處理案例 295
6.1 word2vec算法訓練詞向量 295
6.1.1 單詞表的創建 295
6.1.2 word2vec算法的實現 299
6.1.3 word2vec算法的特性 301
6.2 基於循環神經網路的情感分析 302
6.3 基於循環神經網路的語言模型 305
6.3.1 語言模型簡介 305
6.3.2 語言模型的代碼 308
6.4 Seq2Seq模型及其套用 311
6.4.1 Seq2Seq模型的結構 311
6.4.2 Seq2Seq模型編碼器的代碼 312
6.4.3 Seq2Seq模型注意力機制的代碼 315
6.4.4 Seq2Seq模型解碼器的代碼 317
6.5 BERT模型及其套用 321
6.5.1 BERT模型的結構 321
6.5.2 BERT模型的訓練方法 325
6.5.3 BERT模型的微調 327
6.6 本章總結 329
第7章 其他重要模型 330
7.1 基於寬深模型的推薦系統 330
7.1.1 推薦系統介紹 330
7.1.2 寬深模型介紹 331
7.2 DeepSpeech模型和CTC損失函式 335
7.2.1 語音識別模型介紹 335
7.2.2 CTC損失函式 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的強化學習算法 360
7.4.1 強化學習的基礎概念 361
7.4.2 強化學習的環境 362
7.4.3 DQN模型的原理 363
7.4.4 DQN模型及其訓練過程 365
7.5 使用半精度浮點數訓練模型 369
7.5.1 半精度浮點數的介紹 370
7.5.2 半精度模型的訓練 371
7.5.3 apex擴展包的使用 372
7.6 本章總結 373
第8章 PyTorch高級套用 375
8.1 PyTorch自定義激活函式和梯度 375
8.2 在PyTorch中編寫擴展 377
8.3 正向傳播和反向傳播的鉤子 385
8.4 PyTorch的靜態計算圖 388
8.5 靜態計算圖模型的保存和使用 393
8.6 本章總結 396
第9章 PyTorch原始碼解析 397
9.1 ATen張量計算庫簡介 397
9.2 C++的Python接口 400
9.3 csrc模組簡介 404
9.4 autograd和自動求導機制 407
9.5 C10張量計算庫簡介 408
9.6 本章總結 409
參考文獻 410
作者簡介
張校捷,英偉達(NVIDIA)資深深度學習架構工程師,負責基於CUDA的深度學習框架的最佳化。主要使用的技術棧是作為深度學習框架後端的C/C++/CUDA,以及深度學習框架前端的Python,對主流的深度學習框架如PyTorch和TensorFlow比較熟悉,並精通其在計算機視覺(CV)和自然語言處理(NLP)方面的具體套用。
作者多次作為專題演講嘉賓,受邀參加CSDN主辦的技術大會。