本書(shū)首先從深度學(xué)習(xí)的原理出發(fā),介紹如何把深度學(xué)習(xí)的理論轉(zhuǎn)換為PyTorch代碼,然后介紹如何在計(jì)算機(jī)上運(yùn)行這些代碼。作為一本面向初中級(jí)讀者的技術(shù)類(lèi)圖書(shū),本書(shū)在前面所述內(nèi)容的基礎(chǔ)上,還介紹了學(xué)術(shù)界前沿的一系列實(shí)例,以及PyTorch的源代碼結(jié)構(gòu),以期讀者能夠融會(huì)貫通深度學(xué)習(xí)框架的設(shè)計(jì)和應(yīng)用的思想。
張校捷,英偉達(dá)(NVIDIA)資深深度學(xué)習(xí)架構(gòu)工程師,負(fù)責(zé)基于CUDA的深度學(xué)習(xí)框架的優(yōu)化。目前主要使用的技術(shù)棧是作為深度學(xué)習(xí)框架后端的C/C++/CUDA,以及深度學(xué)習(xí)框架前端的Python,對(duì)主流的深度學(xué)習(xí)框架如PyTorch和TensorFlow比較熟悉,并精通其在計(jì)算機(jī)視覺(jué)(CV)和自然語(yǔ)言處理(NLP)方面的具體應(yīng)用。作者多次作為專(zhuān)題演講嘉賓,受邀參加CSDN主辦的技術(shù)大會(huì)。
第1章 深度學(xué)習(xí)概念簡(jiǎn)介 1
1.1 深度學(xué)習(xí)的歷史 1
1.1.1 深度學(xué)習(xí)的發(fā)展過(guò)程 1
1.1.2 深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)領(lǐng)域的發(fā)展 3
1.1.3 深度學(xué)習(xí)在自然語(yǔ)言處理和其他領(lǐng)域的發(fā)展 6
1.2 機(jī)器學(xué)習(xí)基本概念 7
1.2.1 機(jī)器學(xué)習(xí)的主要任務(wù) 8
1.2.2 機(jī)器模型的類(lèi)型 9
1.2.3 損失函數(shù)以及模型的擬合 11
1.3 深度學(xué)習(xí)基本概念 14
1.3.1 向量、矩陣和張量及其運(yùn)算 15
1.3.2 張量的存儲(chǔ) 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)的梯度計(jì)算 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í)框架簡(jiǎn)介 44
2.1 深度學(xué)習(xí)框架簡(jiǎn)介 44
2.1.1 深度學(xué)習(xí)框架中的張量 44
2.1.2 深度學(xué)習(xí)框架中的計(jì)算圖 45
2.1.3 深度學(xué)習(xí)框架中的自動(dòng)求導(dǎo)和反向傳播 46
2.2 PyTorch框架歷史和特性更迭 47
2.3 PyTorch的安裝過(guò)程 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ù)類(lèi)型 59
2.5.2 張量的創(chuàng)建方式 61
2.5.3 張量的存儲(chǔ)設(shè)備 65
2.5.4 和張量維度相關(guān)的方法 66
2.5.5 張量的索引和切片 69
2.6 PyTorch中張量的運(yùn)算 70
2.6.1 涉及單個(gè)張量的函數(shù)運(yùn)算 70
2.6.2 涉及多個(gè)張量的函數(shù)運(yùn)算 72
2.6.3 張量的極值和排序 73
2.6.4 矩陣的乘法和張量的縮并 75
2.6.5 張量的拼接和分割 77
2.6.6 張量維度的擴(kuò)增和壓縮 79
2.6.7 張量的廣播 80
2.7 PyTorch中的模塊簡(jiǎn)介 82
2.7.1 PyTorch中的模塊類(lèi) 82
2.7.2 基于模塊類(lèi)的簡(jiǎn)單線性回歸類(lèi) 82
2.7.3 線性回歸類(lèi)的實(shí)例化和方法調(diào)用 84
2.8 PyTorch的計(jì)算圖和自動(dòng)求導(dǎo)機(jī)制 87
2.8.1 自動(dòng)求導(dǎo)機(jī)制簡(jiǎn)介 87
2.8.2 自動(dòng)求導(dǎo)機(jī)制實(shí)例 88
2.8.3 梯度函數(shù)的使用 89
2.8.4 計(jì)算圖生成的控制 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ù)載入類(lèi) 96
2.10.2 映射類(lèi)型的數(shù)據(jù)集 97
2.10.3 torchvision工具包的使用 97
2.10.4 可迭代類(lèi)型的數(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ù)類(lèi)型 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計(jì)算機(jī)視覺(jué)模塊 119
3.1 計(jì)算機(jī)視覺(jué)基本概念 119
3.1.1 計(jì)算機(jī)視覺(jué)任務(wù)簡(jiǎn)介 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àn)模型結(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機(jī)器視覺(jué)案例 169
4.1 常見(jiàn)計(jì)算機(jī)視覺(jué)任務(wù)和數(shù)據(jù)集 169
4.1.1 圖像分類(lèi)任務(wù)簡(jiǎn)介 169
4.1.2 目標(biāo)檢測(cè)任務(wù)簡(jiǎn)介 170
4.1.3 圖像分割任務(wù)簡(jiǎn)介 171
4.1.4 圖像生成任務(wù)簡(jiǎn)介 172
4.1.5 常用深度學(xué)習(xí)公開(kāi)數(shù)據(jù)集 173
4.2 手寫(xiě)數(shù)字識(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)練和測(cè)試 182
4.2.5 超參數(shù)的修改和argparse庫(kù)的使用 185
4.3 圖像分類(lèi):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)檢測(cè):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 錨點(diǎn)框和選框預(yù)測(cè) 210
4.4.4 輸入數(shù)據(jù)的預(yù)處理 214
4.4.5 損失函數(shù)的計(jì)算 216
4.4.6 模型的預(yù)測(cè)和非極大抑制算法 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 變分自編碼器的實(shí)現(xiàn) 239
4.7.3 生成對(duì)抗網(wǎng)絡(luò)介紹 242
4.7.4 生成對(duì)抗網(wǎng)絡(luò)的實(shí)現(xiàn) 244
4.8 本章總結(jié) 249
第5章 PyTorch自然語(yǔ)言處理模塊 251
5.1 自然語(yǔ)言處理基本概念 251
5.1.1 機(jī)器翻譯相關(guān)的自然語(yǔ)言處理研究 251
5.1.2 其他領(lǐng)域的自然語(yǔ)言處理研究 253
5.1.3 自然語(yǔ)言處理中特征提取的預(yù)處理 254
5.1.4 自然語(yǔ)言處理中詞頻特征的計(jì)算方法 256
5.1.5 自然語(yǔ)言處理中TF-IDF特征的計(jì)算方法 258
5.2 詞嵌入層 261
5.3 循環(huán)神經(jīng)網(wǎng)絡(luò)層:GRU和LSTM 267
5.3.1 簡(jiǎn)單循環(huán)神經(jīng)網(wǎng)絡(luò) 267
5.3.2 長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(LSTM) 269
5.3.3 門(mén)控循環(huán)單元(GRU) 272
5.4 注意力機(jī)制 280
5.5 自注意力機(jī)制 284
5.5.1 循環(huán)神經(jīng)網(wǎng)絡(luò)的問(wèn)題 284
5.5.2 自注意力機(jī)制的基礎(chǔ)結(jié)構(gòu) 285
5.5.3 使用自注意力機(jī)制來(lái)構(gòu)建Seq2Seq模型 288
5.5.4 PyTorch中自注意力機(jī)制的模塊 290
5.5.5 Pytorch中的Transformer模塊 292
5.6 本章總結(jié) 293
第6章 PyTorch自然語(yǔ)言處理案例 295
6.1 word2vec算法訓(xùn)練詞向量 295
6.1.1 單詞表的創(chuàng)建 295
6.1.2 word2vec算法的實(shí)現(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ò)的語(yǔ)言模型 305
6.3.1 語(yǔ)言模型簡(jiǎn)介 305
6.3.2 語(yǔ)言模型的代碼 308
6.4 Seq2Seq模型及其應(yīng)用 311
6.4.1 Seq2Seq模型的結(jié)構(gòu) 311
6.4.2 Seq2Seq模型編碼器的代碼 312
6.4.3 Seq2Seq模型注意力機(jī)制的代碼 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 語(yǔ)音識(shí)別模型介紹 335
7.2.2 CTC損失函數(shù) 337
7.3 使用Tacotron和WaveNet進(jìn)行語(yǔ)音合成 342
7.3.1 Tacotron模型中基于Seq2Seq的梅爾過(guò)濾器特征合成 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的強(qiáng)化學(xué)習(xí)算法 360
7.4.1 強(qiáng)化學(xué)習(xí)的基礎(chǔ)概念 361
7.4.2 強(qiáng)化學(xué)習(xí)的環(huán)境 362
7.4.3 DQN模型的原理 363
7.4.4 DQN模型及其訓(xùn)練過(guò)程 365
7.5 使用半精度浮點(diǎn)數(shù)訓(xùn)練模型 369
7.5.1 半精度浮點(diǎn)數(shù)的介紹 370
7.5.2 半精度模型的訓(xùn)練 371
7.5.3 apex擴(kuò)展包的使用 372
7.6 本章總結(jié) 373
第8章 PyTorch高級(jí)應(yīng)用 375
8.1 PyTorch自定義激活函數(shù)和梯度 375
8.2 在PyTorch中編寫(xiě)擴(kuò)展 377
8.3 正向傳播和反向傳播的鉤子 385
8.4 PyTorch的靜態(tài)計(jì)算圖 388
8.5 靜態(tài)計(jì)算圖模型的保存和使用 393
8.6 本章總結(jié) 396
第9章 PyTorch源代碼解析 397
9.1 ATen張量計(jì)算庫(kù)簡(jiǎn)介 397
9.2 C++的Python接口 400
9.3 csrc模塊簡(jiǎn)介 404
9.4 autograd和自動(dòng)求導(dǎo)機(jī)制 407
9.5 C10張量計(jì)算庫(kù)簡(jiǎn)介 408
9.6 本章總結(jié) 409
參考文獻(xiàn) 410