《深入理解PyTorch》詳細闡述了與 PyTorch 相關的基本解決方案,主要包括深度卷積神經(jīng)網(wǎng)絡架構、結合 CNN 和LSTM、深度循環(huán)模型架構、高級混合模型、圖神經(jīng)網(wǎng)絡、使用 PyTorch 生成音樂和文本、神經(jīng)風格遷移、深度卷積 GAN、利用擴散生成圖像、深度強化學習、模型訓練優(yōu)化、將 PyTorch 模型投入生產(chǎn)、移動設備上的 PyTorch、使用 PyTorch 進行快速原型開發(fā)、PyTorch 和 AutoML、PyTorch 與可解釋人工智能、推薦系統(tǒng)與 PyTorch、PyTorch 和 Hugging Face 等內(nèi)容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現(xiàn)過程。
深入淺出介紹PyTorch,覆蓋CNN、GAN、圖神經(jīng)網(wǎng)絡等,含豐富代碼示例,適合各層次開發(fā)者。
深度學習正引領著人工智能的革命,而 PyTorch 讓構建深度學習應用變得前所未有的簡單。本書將幫助讀者掌握專家技巧,深入洞察數(shù)據(jù),充分挖掘其潛力,并構建復雜的神經(jīng)網(wǎng)絡模型。
本書從 PyTorch 開始,首先深入探討了用于圖像分類的卷積神經(jīng)網(wǎng)絡(CNN)架構。然后,將帶領讀者探索遞歸神經(jīng)網(wǎng)絡(RNN)架構以及 Transformers,并將其應用于情感分析。接下來,將介紹如何創(chuàng)建任意的神經(jīng)網(wǎng)絡架構,并構建圖神經(jīng)網(wǎng)絡(GNNs)。隨著講解的深入,將幫助讀者把深度學習(DL)應用于包括音樂、文本和圖像生成在內(nèi)的不同領域,使用包括生成對抗網(wǎng)絡(GANs)和擴散模型在內(nèi)的生成模型。
讀者通過學習本書將能在 PyTorch 中構建并訓練自己的深度強化學習模型,并解釋深度學習(DL)模型。讀者不僅將學習如何構建模型,還將學習如何使用專家的技巧和技術將它們部署到生產(chǎn)環(huán)境和移動設備(Android 和 iOS)中。隨后讀者將掌握在分布式環(huán)境中高效訓練大型模型的技能,并使用 AutoML 有效地搜索神經(jīng)架構,以及使用 fastai 快速原型化模型。然后,讀者將學會使用 PyTorch 創(chuàng)建推薦系統(tǒng),最后能結合 Hugging Face 的主要庫和 PyTorch 構建尖端的人工智能(AI)模型。
通過本書的學習,讀者將能夠熟練地執(zhí)行復雜的深度學習任務,使用 PyTorch 構建智能 AI 模型。
適用讀者
本書面向數(shù)據(jù)科學家、機器學習研究人員以及深度學習實踐者,他們希望使用 PyTorch 2.x實現(xiàn)高級深度學習范式。閱讀本書讀者需要具備使用 Python 進行深度學習的工作經(jīng)驗。
本書內(nèi)容
第 1 章包含對深度學習中各種術語和概念的簡要說明,這些內(nèi)容對于理解本書后續(xù)部分非常有幫助。本章還提供了 PyTorch 與 TensorFlow 的快速對比,這兩種語言和工具將貫穿全書,用于構建深度學習模型。最后,我們使用 PyTorch 訓練了一個神經(jīng)網(wǎng)絡模型。
第 2 章概述了近年來開發(fā)的最先進的深度 CNN 模型架構。我們使用 PyTorch 創(chuàng)建了許多這樣的模型,并針對適當?shù)娜蝿諏λ鼈冞M行了訓練。
第 3 章通過一個實例介紹如何構建一個神經(jīng)網(wǎng)絡模型,該模型結合了卷積神經(jīng)網(wǎng)絡(CNN)和長短期記憶網(wǎng)絡(LSTM),在輸入圖像時輸出生成文本和標題,并使用 PyTorch實現(xiàn)。
第 4 章深入探討遞歸神經(jīng)網(wǎng)絡架構的最新進展,特別是 RNN、LSTM 和 GRU。完成本章的學習后,讀者將能夠在 PyTorch 中創(chuàng)建復雜的遞歸架構。
第 5 章討論一些先進的、獨特的混合神經(jīng)網(wǎng)絡架構,如徹底改變了自然語言處理領域的 Transformers。此外,本章還探討了 RandWireNNs,一窺神經(jīng)網(wǎng)絡架構搜索的世界,并使用 PyTorch 進行實現(xiàn)。
第 6 章介紹圖神經(jīng)網(wǎng)絡(GNNs)背后的基本概念、不同類型的圖學習任務以及各種 GNN 模型架構。然后,本章深入探討了其中一些架構,即圖卷積網(wǎng)絡(GCNs)和圖注意力網(wǎng)絡(GATs)。本章選擇使用 PyTorch Geometric 作為在 PyTorch 中構建 GNNs 的首選庫。
第 7 章展示如何使用 PyTorch 創(chuàng)建深度學習模型,這些模型運行時能夠在幾乎不提供任何輸入的情況下創(chuàng)作音樂和撰寫文本。
第 8 章討論一種特殊的 CNN 模型,它可以混合多個輸入圖像并生成具有藝術感的任意圖像。
第 9 章解釋生成對抗網(wǎng)絡(GANs)的概念,并使用 PyTorch 在特定任務上訓練了一個GAN。
第 10 章從頭開始實現(xiàn)了一個擴散模型,作為最先進的文本生成圖像模型,并使用PyTorch 實現(xiàn)。
第 11 章探索如何使用 PyTorch 訓練深度強化學習任務上的代理,如視頻游戲中的玩家。
第 12 章探討如何通過分布式訓練以及 PyTorch 中的混合精度訓練實踐,用有限的資源高效訓練大型模型。本章結束時,讀者將掌握使用 PyTorch 高效訓練大型模型的技能。
第 13 章詳細講解如何將 PyTorch 編寫的深度學習模型部署到真實的生產(chǎn)系統(tǒng)中,并使用 Flask 和 Docker,以及 TorchServe。隨后讀者將學習如何使用 TorchScript 和 ONNX 導出PyTorch 模型。此外還將學習如何將 PyTorch 代碼作為 C 應用程序進行打包。最后,讀者將學習如何在一些流行的云計算平臺上使用 PyTorch。
第 14 章介紹使用各種預訓練的 PyTorch 模型,并將其部署在不同的移動操作系統(tǒng)上。
第 15 章討論各種工具和庫,如 fastai 和 PyTorch Lightning,它們使 PyTorch 中的模型訓練過程快了數(shù)倍。此外本章還解釋了如何分析 PyTorch 代碼以理解資源利用情況。
第 16 章介紹如何使用 AutoML 和 Optuna 有效設置機器學習實驗,并與 PyTorch 結合使用。
第 17 章重點在于使用 Captum 等工具,并結合 PyTorch,使機器學習模型對普通人也具有可解釋性。
第 18 章從頭開始構建一個基于深度學習的電影推薦系統(tǒng),并使用 PyTorch 實現(xiàn)。
第 19 章討論如何使用 Hugging Face 庫,如 Transformers、Accelerate、Optimum 等,與PyTorch 結合構建尖端的多模態(tài) AI 模型。
背景知識
為了充分利用本書,讀者需要滿足以下前提條件。
(1)需要具備 Python 實際開發(fā)經(jīng)驗以及 PyTorch 的基礎知識。因為本書中的大部分練習以 Jupyter Notebook 的形式呈現(xiàn),所以期望讀者具有使用 Jupyter Notebook 的工作經(jīng)驗。
(2)某些章節(jié)中的一些練習可能需要 GPU 來加速模型訓練,因此擁有 NVIDIA GPU是一個加分項。
(3)擁有 AWS、Google Cloud 和 Microsoft Azure 等云計算平臺的注冊賬戶將有助于瀏覽第 13 章的部分內(nèi)容,并促進第 12 章在多個虛擬機上進行分布式訓練。
Ashish Ranjan Jha擁有印度理工學院Roorkee的電氣工程學士學位,EPFL(瑞士)的計算機科學碩士學位和Quantic商學院(華盛頓)的工商管理碩士學位。他在所有3個學位中都獲得了優(yōu)異的成績。他曾就職于甲骨文(Oracle)、索尼(Sony)等大型科技公司,以及revolt等最新的科技獨角獸公司,主要專注于人工智能。他目前是一名機器學習工程師。Ashish在機器學習領域有幾年的工作經(jīng)驗和專業(yè)知識,Python是他的首選工具。他曾參與過一系列產(chǎn)品和項目,從開發(fā)一款使用傳感器數(shù)據(jù)預測運輸方式的應用程序,到檢測汽車損害保險索賠中的欺詐行為。除了是一名作家,機器學習工程師,數(shù)據(jù)科學家,他還經(jīng)常在他的個人博客網(wǎng)站上發(fā)表關于機器學習的最新研究和工程主題的博客。
第 1 章 PyTorch 深度學習概述 1
1.1 深度學習回顧 2
1.2 優(yōu)化計劃 10
1.3 PyTorch 庫與 TensorFlow 的對比 13
1.3.1 張量模塊 14
1.3.2 PyTorch 模塊 17
1.3.3 使用 PyTorch 訓練神經(jīng)網(wǎng)絡 20
1.4 本章小結 30
1.5 參考文獻 30
第 2 章 深度卷積神經(jīng)網(wǎng)絡架構 31
2.1 為什么 CNN 如此強大 31
2.2 CNN 架構的演變 34
2.3 從頭開始開發(fā) LeNet 36
2.3.1 使用 PyTorch 構建 LeNet 38
2.3.2 訓練 LeNet 43
2.3.3 測試 LeNet 44
2.4 微調 AlexNet 模型 46
2.5 運行預訓練的 VGG 模型 56
2.6 GoogLeNet 和 Inception v3 58
2.6.1 Inception 模塊 58
2.6.2 11 卷積 61
2.6.3 全局平均池化 61
2.6.4 輔助分類器 61
2.6.5 Inception v3 62
2.7 ResNet 和 DenseNet 架構 65
2.7.1 ResNet 65
2.7.2 DenseNet 68
2.8 EfficientNet 和 CNN 架構的未來 72
2.9 本章小結 74
2.10 參考文獻 74
第 3 章 結合 CNN 和 LSTM 75
3.1 構建帶有 CNN 和 LSTM 的神經(jīng)網(wǎng)絡 75
3.2 使用 PyTorch 構建圖像字幕生成器 77
3.2.1 下載圖像字幕數(shù)據(jù)集 78
3.2.2 預處理字幕(文本)數(shù)據(jù) 79
3.2.3 預處理圖像數(shù)據(jù) 81
3.2.4 定義圖像字幕數(shù)據(jù)加載器 82
3.2.5 定義 CNN-LSTM 模型 84
3.2.6 訓練 CNN-LSTM 模型 87
3.2.7 使用訓練好的模型生成圖像字幕 90
3.3 本章小結 92
3.4 參考文獻 92
第 4 章 深度循環(huán)模型架構 93
4.1 探索循環(huán)網(wǎng)絡的演變 94
4.1.1 循環(huán)神經(jīng)網(wǎng)絡的類型 94
4.1.2 RNN 96
4.1.3 雙向 RNN 97
4.1.4 LSTM 98
4.1.5 擴展和雙向 LSTM 100
4.1.6 多維 RNN 100
4.1.7 堆疊 LSTM 100
4.1.8 GRU 101
4.1.9 網(wǎng)格 LSTM 101
4.1.10 門控正交循環(huán)單元 102
4.2 訓練 RNN 進行情感分析 102
4.2.1 加載和預處理文本數(shù)據(jù)集 103
4.2.2 實例化并訓練模型 108
4.3 構建雙向 LSTM 113
4.3.1 加載和預處理文本數(shù)據(jù)集 113
4.3.2 實例化并訓練 LSTM 模型 115
4.4 GRU 和基于注意力的模型 117
4.4.1 GRU 和 PyTorch 117
4.4.2 基于注意力的模型 118
4.5 本章小結 120
4.6 參考文獻 120
第 5 章 高級混合模型 121
5.1 構建用于語言建模的 transformer 模型 121
5.1.1 語言建模回顧 122
5.1.2 transformer 模型架構 122
5.1.3 在 PyTorch 中定義 transformer 模型 127
5.2 從頭開始開發(fā) RandWireNN 模型 133
5.2.1 理解 RandWireNN 133
5.2.2 利用 PyTorch 開發(fā) RandWireNN 134
5.3 本章小結 143
5.4 參考文獻 143
第 6 章 圖神經(jīng)網(wǎng)絡 145
6.1 圖神經(jīng)網(wǎng)絡簡介 145
6.1.1 圖神經(jīng)網(wǎng)絡的直觀理解 146
6.1.2 在圖數(shù)據(jù)上使用常規(guī) NN 147
6.1.3 通過計算圖理解 GNN 的強大能力 148
6.2 圖學習任務的類型 150
6.2.1 節(jié)點級任務 151
6.2.2 邊級任務 152
6.2.3 圖級任務 153
6.3 回顧突出的 GNN 模型 153
6.3.1 GCN 中的圖卷積 154
6.3.2 在圖上使用注意力機制的 GAT 156
6.3.3 執(zhí)行圖采樣的 GraphSAGE 157
6.3.4 使用PyTorch Geometric 構建圖卷積網(wǎng)絡模型 159
6.3.5 加載和探索引用網(wǎng)絡數(shù)據(jù)集 159
6.3.6 構建一個簡單的基于神經(jīng)網(wǎng)絡的節(jié)點分類器 162
6.3.7 構建用于節(jié)點分類的 GCN 模型 167
6.4 使用 PyTorch Geometric 訓練 GAT 模型 171
6.5 本章小結 176
6.6 參考文獻 176
第 7 章 使用 PyTorch 生成音樂和文本 177
7.1 使用 PyTorch 構建基于 transformer 的文本生成器 177
7.1.1 訓練基于 transformer 的語言模型 177
7.1.2 保存和加載語言模型 178
7.1.3 使用語言模型生成文本 179
7.2 使用 GPT 模型作為文本生成器 180
7.2.1 使用 GPT-2 實現(xiàn)即用型文本生成 180
7.2.2 使用 PyTorch 的文本生成策略 181
7.2.3 使用 GPT-3 實現(xiàn)文本生成 187
7.3 使用 PyTorch 并通過 LSTM 生成 MIDI 音樂 189
7.3.1 加載 MIDI 音樂數(shù)據(jù) 189
7.3.2 定義 LSTM 模型和訓練過程 193
7.3.3 訓練并測試音樂生成模型 195
7.4 本章小結 198
7.5 參考文獻 198
第 8 章 神經(jīng)風格遷移 199
8.1 如何在圖像之間遷移風格 200
8.2 使用 PyTorch 實現(xiàn)神經(jīng)風格遷移 203
8.2.1 加載內(nèi)容和風格圖像 203
8.2.2 加載并修剪預訓練的 VGG19 模型 204
8.2.3 構建神經(jīng)風格遷移模型 206
8.2.4 訓練風格遷移模型 207
8.2.5 嘗試風格遷移系統(tǒng) 211
8.3 本章小結 214
8.4 參考文獻 214
第 9 章 深度卷積 GAN 215
9.1 定義生成器和鑒別器網(wǎng)絡 216
9.2 使用 PyTorch 訓練 DCGAN 218
9.2.1 定義生成器 219
9.2.2 定義鑒別器 221
9.2.3 加載圖像數(shù)據(jù)集 222
9.2.4 DCGAN 的訓練循環(huán) 223
9.3 使用 GAN 進行風格遷移 227
9.3.1 pix2pix 架構 227
9.3.2 pix2pix 生成器 229
9.3.3 pix2pix 鑒別器 233
9.4 本章小結 235
9.5 參考文獻 235
第 10 章 利用擴散生成圖像 237
10.1 理解使用擴散的圖像生成 237
10.1.1 擴散的工作方式 239
10.1.2 訓練一個前向擴散模型 239
10.1.3 執(zhí)行反向擴散或去噪 242
10.2 訓練一個用于圖像生成的擴散模型 244
10.2.1 使用 Hugging Face 數(shù)據(jù)集加載數(shù)據(jù)集 244
10.2.2 使用 torchvision 轉換處理數(shù)據(jù)集 247
10.2.3 使用 diffusers 為圖像添加噪聲 248
10.2.4 定義 UNet 模型 250
10.2.5 訓練 UNet 模型 251
10.3 使用擴散的文本到圖像生成 256
10.3.1 將文本輸入編碼為嵌入向量 257
10.3.2 在(條件)UNet 模型中攝入額外的文本數(shù)據(jù) 258
10.4 使用 Stable Diffusion 模型從文本生成圖像 260
10.5 本章小結 263
10.6 參考文獻 263
第 11 章 深度強化學習 265
11.1 回顧強化學習概念 266
11.1.1 算法類型 268
11.1.2 基于模型的強化學習算法 269
11.1.3 無模型的強化學習算法 269
11.2 探討 Q 學習 270
11.3 深度 Q 學習 274
11.3.1 使用兩個獨立的 DNN 275
11.3.2 經(jīng)驗回放緩沖區(qū) 275
11.4 在 PyTorch 中構建 DQN 模型 276
11.4.1 初始化主 CNN 模型和目標 CNN 模型 276
11.4.2 定義經(jīng)驗回放緩沖區(qū) 279
11.4.3 設置環(huán)境 279
11.4.4 定義 CNN 優(yōu)化函數(shù) 281
11.4.5 管理和運行回合 282
11.4.6 訓練 DQN 模型以學習 Pong 284
11.5 本章小結 287
11.6 參考文獻 288
第 12 章 模型訓練優(yōu)化 289
12.1 PyTorch 分布式訓練 289
12.1.1 以常規(guī)方式訓練 MNIST 模型 290
12.1.2 分布式訓練 MNIST 模型 292
12.2 CUDA 在 GPU 上進行分布式訓練 300
12.2.1 自動混合精度訓練 302
12.2.2 在 GPU 上的常規(guī)模型訓練 302
12.2.3 在GPU 上進行混合精度訓練 304
12.3 本章小結 307
12.4 參考文獻 307
第 13 章 將 PyTorch 模型投入生產(chǎn) 309
13.1 PyTorch 中的模型服務 309
13.1.1 創(chuàng)建 PyTorch 模型推理管道 310
13.1.2 保存和加載訓練模型 310
13.1.3 構建推理管道 312
13.2 構建基礎模型服務器 315
13.2.1 使用Flask 編寫基礎應用程序 316
13.2.2 使用 Flask 構建我們的模型服務器 317
13.2.3 使用 Flask 服務器運行預測 319
13.3 創(chuàng)建模型微服務 321
13.4 使用 TorchServe 提供 PyTorch 模型服務 326
13.4.1 安裝 TorchServe 326
13.4.2 啟動并使用 TorchServe 服務器 326
13.5 導出使用 TorchScript 和 ONNX 的通用 PyTorch 模型 330
13.5.1 理解 TorchScript 的實用性 330
13.5.2 使用 TorchScript 進行模型追蹤 331
13.5.3 使用 TorchScript 進行模型腳本化 334
13.6 在 C 中運行 PyTorch 模型 336
13.7 使用 ONNX 導出 PyTorch 模型 340
13.8 在云端部署 PyTorch 模型 342
13.8.1 使用 PyTorch 與 AWS 342
13.8.2 使用 AWS 實例部署 PyTorch 模型 342
13.8.3 使用 TorchServe 與 Amazon SageMaker 344
13.8.4 在 Google Cloud 上部署 PyTorch 模型 345
13.8.5 使用 Azure 部署 PyTorch 模型 346
13.8.6 使用 Azure 的 DSVM 347
13.8.7 Azure 機器學習服務 347
13.9 本章小結 348
13.10 參考文獻 348
第 14 章 移動設備上的 PyTorch 353
14.1 在 Android 上部署 PyTorch 模型 354
14.1.1 將 PyTorch 模型轉換為適合移動設備的格式 354
14.1.2 設置 Android 應用程序開發(fā)環(huán)境 354
14.2 在 Android 應用程序中使用手機相機捕捉圖像 357
14.2.1 在應用啟動時啟用相機 358
14.2.2 在相機捕獲的圖像上運行機器學習模型推理 362
14.2.3 在 Android 移動設備上啟動應用程序 366
14.3 在 iOS 上構建 PyTorch 應用 370
14.3.1 設置 iOS 開發(fā)環(huán)境 371
14.3.2 在 iOS 應用中使用手機攝像頭捕獲圖像 373
14.3.3 在攝像頭捕獲的圖像上運行機器學習模型推理 375
14.4 本章小結 380
14.5 參考文獻 380
第 15 章 使用 PyTorch 進行快速原型開發(fā) 383
15.1 使用 fastai 在幾分鐘內(nèi)設置模型訓練 384
15.1.1 設置 fastai 和加載數(shù)據(jù) 384
15.1.2 使用 fastai 訓練 MNIST 模型 386
15.1.3 使用 fastai 評估和解釋模型 387
15.2 使用 PyTorch Lightning 在硬件上訓練模型 389
15.2.1 在 PyTorch Lightning 中定義模型組件 390
15.2.2 使用 PyTorch Lightning 訓練和評估模型 391
15.3 使用 PyTorch 分析器分析 MNIST 模型推理 394
15.3.1 在 CPU 上進行分析 394
15.3.2 在 GPU 上分析模型推理 399
15.4 本章小結 401
15.5 參考文獻 402
第 16 章 PyTorch 和 AutoML 403
16.1 使用 AutoML 尋找最佳神經(jīng)架構 403
16.1.1 使用 Auto-PyTorch 實現(xiàn)最優(yōu) MNIST 模型搜索 404
16.1.2 加載 MNIST 數(shù)據(jù)集 404
16.1.3 使用 Auto-PyTorch 進行神經(jīng)架構搜索 405
16.1.4 可視化最優(yōu) AutoML 模型 406
16.2 使用 Optuna 進行超參數(shù)搜索 410
16.2.1 定義模型架構和加載數(shù)據(jù)集 410
16.2.2 定義模型訓練程序和優(yōu)化計劃 412
16.2.3 運行 Optuna 的超參數(shù)搜索 413
16.3 本章小結 416
16.4 參考文獻 416
第 17 章 PyTorch 與可解釋人工智能 419
17.1 PyTorch 中的模型可解釋性 419
17.1.1 手寫數(shù)字分類器訓練 420
17.1.2 可視化模型的卷積濾波器 422
17.1.3 可視化模型的特征圖 424
17.2 使用 Captum 解釋模型 426
17.2.1 設置Captum 426
17.2.2 探索 Captum 的可解釋性工具 427
17.3 本章小結 431
17.4 參考文獻 431
第 18 章 推薦系統(tǒng)與 PyTorch 433
18.1 利用深度學習構建推薦系統(tǒng) 434
18.1.1 理解電影推薦系統(tǒng)數(shù)據(jù)集 434
18.1.2 理解基于嵌入的推薦系統(tǒng) 435
18.2 理解和處理 MovieLens 數(shù)據(jù)集 437
18.2.1 下載 MovieLens 數(shù)據(jù)集 437
18.2.2 加載和分析 MovieLens 數(shù)據(jù)集 438
18.2.3 處理 MovieLens 數(shù)據(jù)集 440
18.2.4 創(chuàng)建 MovieLens 數(shù)據(jù)加載器 442
18.3 訓練和評估推薦系統(tǒng)模型 443
18.3.1 定義 EmbeddingNet 架構 443
18.3.2 訓練 EmbeddingNet 446
18.3.3 評估訓練好的 EmbeddingNet 模型 448
18.4 使用訓練好的模型構建推薦系統(tǒng) 449
18.5 本章小結 452
18.6 參考文獻 452
第 19 章 PyTorch 和 Hugging Face 453
19.1 在 PyTorch 背景下理解 Hugging Face 453
19.1.1 探索與 PyTorch 相關的 Hugging Face 組件 453
19.1.2 將 Hugging Face 與 PyTorch 集成 455
19.2 使用 Hugging Face Hub 獲取預訓練模型 457
19.3 使用 Hugging Face 數(shù)據(jù)集庫與 PyTorch 460
19.4 使用 Accelerate 加速 PyTorch 模型訓練 464
19.5 使用 Optimum 優(yōu)化 PyTorch 模型部署 466
19.6 本章小結 470
19.7 參考文獻 471