《PyTorch編程技術與深度學習》講述深度學習的基本原理,使用PyTorch展示涉及的深度學習算法。通過理論講解和編程操作,使讀者了解并掌握深度學習的原理和PyTorch編程技能,拉近理論與實踐的距離。全書共分9章,主要內容包括PyTorch介紹、PyTorch基礎編程、深度學習快速入門、神經網絡訓練與優化、卷積神經網絡原理、卷積神經網絡示例、詞嵌入模型、循環神經網絡原理、NLP示例。書中不但涵蓋成熟的卷積神經網絡和循環神經網絡的原理和示例,還包含一些新的如Transformer和知識蒸餾的內容。全書源代碼全部在Python 3.7.4 PyTorch 1.9.0版本上調試成功。 《PyTorch編程技術與深度學習》適合深度學習和PyTorch編程人員作為入門和提高的技術參考書使用,也適合用作計算機專業高年級本科生和研究生的教材或教學參考書。
深度學習是機器學習中非常激動人心的領域,深度學習算法工程師、圖像視覺工程師和自然語言處理工程師逐漸成為報酬較高的新興職業,各行各業的公司都在尋求具備深度學習理論知識和實際編程技能的人才。初學者學習深度學習理論與PyTorch編程技術一般都會面臨兩大障礙,第一大障礙是深度學習理論基礎,深度學習包含了很多需要掌握的基本概念;第二大障礙是編程實踐。本書就是為了讓初學者順利入門而設計的,本書系統講解了深度學習的原理以及PyTorch編程技術,內容較全面,可操作性強,做到理論與實踐相結合,幫助初學者順利入門,進而掌握好這項技術。
《PyTorch編程技術與深度學習》講解詳細且通俗易懂,以具體的示例輔助學習和實踐,便于讀者理解和自主應用。本書有三大特色。特色一:理論與實踐結合。通常的PyTorch編程書籍往往只提供一些可運行代碼和點到為止的講解,學習者常常知其然而不知其所以然。本書不但提供示例代碼,還詳細講解背后的原理和代碼的細節,加深對代碼的理解。特色二:內容新,反映PyTorch的發展方向。特色三:在線輔導。專門開設QQ學習群以提供學習全程輔導,自學無憂。
《PyTorch編程技術與深度學習》可供深度學習PyTorch編程初學者作為入門的技術參考書,也適合作為大中專院校學生的教材或參考書。
深度學習是機器學習中最激動人心的領域,深度學習算法工程師、圖像視覺工程師和自然語言處理工程師逐漸成為報酬較高的新興職業,各行各業都在尋求具備深度學習理論知識和實際編程技能的人才。只有具備深度學習相關理論和實踐技能才更有可能在上述新興職業中獲得成功,但是學習和掌握神經網絡、卷積神經網絡、循環神經網絡等深度學習理論具有一定的難度,而掌握PyTorch等深度學習工具更顯得困難,因此擁有一本容易上手的深度學習入門書籍肯定會對初學者有很大的幫助,本書就是專門為初學者精心編寫的。
初學者探究深度學習理論與PyTorch編程技術一般都會面臨兩大障礙。第一大障礙是深度學習理論基礎,深度學習包含了很多需要掌握的基本概念,如神經元、全連接、Dropout、權重初始化、優化算法、卷積神經網絡、卷積層和池化層、殘差網絡、Inception網絡、遷移學習、知識蒸餾、循環神經網絡、LSTM、GRU、雙向循環神經網絡、詞嵌入、Word2Vec、GloVe、注意力機制、Transformer等,學習和理解這些概念需要花費大量的時間和精力,學習周期漫長。第二大障礙是編程實踐,PyTorch是一個非常龐大的開源平臺,擁有一個包含各種工具、庫和社區資源的良好生態系統,要在短時間內掌握這些編程技能較為困難,并且由于人工智能領域發展異常迅猛,新技術、新方法層出不窮,PyTorch的API也在不斷進化發展,這使得PyTorch開發人員在應用中總會遇到新問題,需要與時俱進,不斷學習。
本書就是為了讓初學者順利入門而設計的。首先,本書講述深度學習的基本原理,讓讀者了解基本的深度學習算法之后,通過實踐來解決經典問題,逐步過渡到解決實際問題。其次,本書精心設計了一些構建深度網絡的案例,讀者能親身體會如何將深度學習理論應用到實際中,加深對深度學習算法的理解和編程能力的提高,逐步掌握深度學習的原理和編程技能,拉近理論與實踐的距離。
本書共分9章。第1章介紹深度學習和PyTorch的基本概念、PyTorch的安裝和常用數據集;第2章為PyTorch基礎編程,主要內容包括張量數據操作、自動求導、數據集API、torchvision工具示例和torchtext工具示例;第3章為深度學習快速入門,主要內容包括線性回歸、使用nn模塊構建線性回歸模型、邏輯回歸、Softmax回歸、神經網絡的基本概念以及PyTorch實現;第4章為神經網絡訓練與優化,主要內容包括神經網絡迭代概念、正則化方法、優化算法和PyTorch的初始化函數;第5章為卷積神經網絡原理,主要內容包括CNN的基本概念、簡單的CNN網絡和PyTorch實現LeNet-5網絡;第6章為卷積神經網絡示例,主要內容包括經典CNN網絡、使用預訓練的CNN、知識蒸餾,以及CNN可視化;第7章為詞嵌入模型,主要內容包括詞嵌入模型介紹、詞嵌入學習,以及Word2Vec算法實現;第8章為循環神經網絡原理,主要內容包括RNN介紹、基本RNN模型、LSTM、GRU、注意力機制、Transformer模型原理及PyTorch實現;第9章為NLP示例,主要內容包括情感分析、語言模型,以及文本序列數據生成。
由于深度學習軟件更新很快,新開發的代碼在舊版本環境下不一定能夠兼容運行,為便于讀者參考,在此列出本書代碼的開發調試環境,即Python 3.7.4、PyTorch 1.9.0、conda 4.10.3、numpy 1.19.2、torchvision 0.10.0、torchtext 0.10.0、gensim 4.0.1、spacy 2.3.7。此外,本書配套源代碼讀者可通過掃描右側的二維碼下載使用。
作者在寫作中付出很多努力和勞動,但限于作者的學識、能力和精力,書中難免會存在一些疏漏或缺陷,敬請各位讀者批評指正。感謝昆明理工大學提供的研究和寫作環境。感謝清華大學出版社的編輯老師在出版方面提出的建設性意見和給予的無私幫助,沒有他們的大力支持、幫助和鼓勵,本書不一定能夠面世。感謝讀者群的一些未見面的群友,他們對作者以前的著作提出寶貴的建議并鼓勵作者撰寫更多更好的技術書籍,雖然我無法一一列舉姓名,但他們的幫助我會一直銘記在心。感謝購買本書的朋友,歡迎批評指正,你們的批評和建議都會受到重視,并在將來再版中改進。
編 者
袁梅宇,工學博士,碩士導師,現在昆明理工大學計算機系任教。為本科生和研究生主講軟件工程、Java程序設計、Java EE技術、數據庫原理、機器學習、人工智能等多門核心課程。第一作者專著有《Java EE企業級編程開發實例詳解》《數據挖掘與機器學習WEKA應用技術與實踐》《數據挖掘與機器學習WEKA應用技術與實踐(第二版)》《求精要訣Java EE編程開發案例精講》《機器學習基礎原理算法與實踐》。
第1章 PyTorch介紹 1
1.1 深度學習與PyTorch簡介 2
1.1.1 深度學習介紹 2
1.1.2 PyTorch介紹 3
1.2 PyTorch安裝 6
1.2.1 Anaconda下載 6
1.2.2 Windows下安裝PyTorch 7
1.2.3 Linux Ubuntu下安裝PyTorch 8
1.2.4 Anaconda管理 9
1.3 常用數據集 12
1.3.1 MNIST數據集 12
1.3.2 Fashion-MNIST數據集 14
1.3.3 CIFAR-10數據集 17
1.3.4 Dogs vs. Cats數據集 19
1.3.5 AG_NEWS數據集 20
1.3.6 WikiText2數據集 22
1.3.7 QIQC數據集 23
1.3.8 Multi30k數據集 24
習題 25
第2章 PyTorch基礎編程 27
2.1 張量數據操作 28
2.1.1 張量簡介 28
2.1.2 張量操作 28
2.1.3 廣播機制 45
2.1.4 在GPU上使用Tensor 48
2.2 自動求導 50
2.2.1 自動求導概念 50
2.2.2 自動求導示例 50
2.3 數據集API 53
2.3.1 自定義數據集類 53
2.3.2 DataLoader類 55
2.4 torchvision工具示例 57
2.4.1 編寫簡單的圖像數據集 57
2.4.2 Transforms模塊 59
2.4.3 Normalize用法 61
2.4.4 ImageFolder用法 62
2.5 torchtext工具示例 64
2.5.1 編寫文本預處理程序 64
2.5.2 使用torchtext 67
習題 70
第3章 深度學習快速入門 71
3.1 線性回歸 72
3.1.1 線性回歸介紹 72
3.1.2 線性回歸實現 76
3.2 使用nn模塊構建線性回歸模型 82
3.2.1 使用nn.Linear訓練線性回歸模型 82
3.2.2 使用nn.Sequential訓練線性回歸模型 85
3.2.3 使用nn.Module訓練線性回歸模型 87
3.3 邏輯回歸 88
3.3.1 邏輯回歸介紹 89
3.3.2 邏輯回歸實現 91
3.4 Softmax回歸 96
3.4.1 Softmax回歸介紹 96
3.4.2 Softmax回歸實現 98
3.5 神經網絡 103
3.5.1 神經元 103
3.5.2 激活函數 104
3.5.3 神經網絡原理 108
3.5.4 PyTorch神經網絡編程 111
習題 116
第4章 神經網絡訓練與優化 119
4.1 神經網絡迭代概念 120
4.1.1 訓練誤差與泛化誤差 120
4.1.2 訓練集、驗證集和測試集
劃分 121
4.1.3 偏差與方差 123
4.2 正則化方法 124
4.2.1 提前終止 125
4.2.2 正則化 126
4.2.3 Dropout 127
4.3 優化算法 129
4.3.1 小批量梯度下降 130
4.3.2 Momentum算法 131
4.3.3 RMSProp算法 134
4.3.4 Adam算法 137
4.4 PyTorch的初始化函數 139
4.4.1 普通初始化 139
4.4.2 Xavier初始化 140
4.4.3 He初始化 141
習題 142
第5章 卷積神經網絡原理 145
5.1 CNN介紹 146
5.1.1 CNN與圖像處理 146
5.1.2 卷積的基本原理 146
5.1.3 池化的基本原理 155
5.2 簡單的CNN網絡 158
5.2.1 定義網絡模型 158
5.2.2 模型訓練 160
5.2.3 模型評估 160
5.2.4 主函數 161
5.3 PyTorch實現LeNet-5網絡 163
5.3.1 LeNet-5介紹 163
5.3.2 LeNet-5實現MNIST手寫數字識別 164
5.3.3 LeNet-5實現CIFAR-10圖像識別 168
習題 170
第6章 卷積神經網絡示例 171
6.1 經典CNN網絡 172
6.1.1 VGG 172
6.1.2 ResNet 173
6.1.3 Inception 175
6.1.4 Xception 178
6.1.5 ResNet代碼研讀 179
6.2 使用預訓練的CNN 185
6.2.1 特征抽取 186
6.2.2 微調 194
6.3 知識蒸餾 197
6.3.1 知識蒸餾原理 197
6.3.2 知識蒸餾示例 199
6.4 CNN可視化 204
6.4.1 中間激活可視化 205
6.4.2 過濾器可視化 212
習題 214
第7章 詞嵌入模型 215
7.1 詞嵌入模型介紹 216
7.1.1 獨熱碼 216
7.1.2 詞嵌入 222
7.2 詞嵌入學習 225
7.2.1 詞嵌入學習的動機 226
7.2.2 Skip-Gram算法 227
7.2.3 CBOW算法 229
7.2.4 負采樣 230
7.2.5 GloVe算法 234
7.3 Word2Vec算法實現 235
7.3.1 Skip-Gram實現 235
7.3.2 CBOW實現 239
7.3.3 負采樣Skip-Gram實現 243
習題 248
第8章 循環神經網絡原理 251
8.1 RNN介紹 252
8.1.1 有記憶的神經網絡 252
8.1.2 RNN用途 255
8.2 基本RNN模型 259
8.2.1 基本RNN原理 259
8.2.2 基本RNN的訓練問題 263
8.2.3 基本RNN編程 265
8.2.4 基本RNN示例 269
8.3 LSTM 275
8.3.1 LSTM原理 275
8.3.2 LSTM編程 279
8.4 GRU 280
8.4.1 GRU原理 280
8.4.2 GRU編程 282
8.5 注意力機制 283
8.5.1 Seq2Seq模型的缺陷 283
8.5.2 機器翻譯中的注意力機制 284
8.6 Transformer模型 286
8.6.1 編碼器 287
8.6.2 多頭注意力層 288
8.6.3 前向層 289
8.6.4 位置編碼 289
8.6.5 解碼器 290
8.6.6 解碼器層 291
8.6.7 Transformer的PyTorch
實現 291
習題 292
第9章 NLP示例 295
9.1 情感分析 296
9.1.1 AG NEWS示例 296
9.1.2 Quora競賽示例 301
9.2 語言模型 310
9.3 文本序列數據生成 316
9.3.1 向莎士比亞學寫詩 316
9.3.2 神經機器翻譯 324
習題 333
參考文獻 335