PyTorch 深度學習和圖神經網絡 捲2 開發應用

PyTorch 深度學習和圖神經網絡 捲2 開發應用

作者: 李金洪
出版社: 人民郵電
出版在: 2021-12-01
ISBN-13: 9787115560926
ISBN-10: 7115560927
裝訂格式: 平裝
總頁數: 318 頁





內容描述


本書通過深度學習實例,從可解釋性角度出發,闡述深度學習的原理,並將圖神經網絡與深度學習結合,介紹圖神經網絡的實現技術。本書分為6章,主要內容包括:圖片分類模型、機器視覺的高級應用、自然語言處理的相關應用、神經網絡的可解釋性、識別未知分類的方法——零次學習、異構圖神經網絡。本書中的實例是在PyTorch框架上完成的,具有較高的實用價值。
本書適合人工智能從業者、程序員進階學習,也適合作為大專院校相關專業師生的教學和學慣用書,以及培訓學校的教材。


目錄大綱


第 1章 圖片分類模型 1
1.1 深度神經網絡起源 2
1.2 Inception系列模型 2
1.2.1 多分支結構 2
1.2.2 全局均值池化 3
1.2.3 Inception V1模型 3
1.2.4 Inception V2模型 4
1.2.5 Inception V3模型 5
1.2.6 Inception V4模型 6
1.2.7 Inception-ResNet V2模型 6
1.3 ResNet模型 6
1.3.1 殘差連接的結構 7
1.3.2 殘差連接的原理 8
1.4 DenseNet模型 8
1.4.1 DenseNet模型的網絡結構 8
1.4.2 DenseNet模型的特點 9
1.4.3 稠密塊 9
1.5 PNASNet模型 9
1.5.1 組卷積 10
1.5.2 深度可分離卷積 11
1.5.3 空洞卷積 12
1.6 EfficientNet模型 14
1.6.1 MBConv卷積塊 15
1.6.2 DropConnect層 16
1.7 實例:使用預訓練模型識別圖片內容 16
1.7.1 了解torchvision庫中的預訓練模型 16
1.7.2 代碼實現:下載並加載預訓練模型 17
1.7.3 代碼實現:加載標籤並對輸入數據進行預處理 18
1.7.4 代碼實現:使用模型進行預測 19
1.7.5 代碼實現:預測結果可視化 20
1.8 實例:使用遷移學習識別多種鳥類 21
1.8.1 什麼是遷移學習 21
1.8.2 樣本介紹:鳥類數據集CUB-200 22
1.8.3 代碼實現:用torch.utils.data接口封裝數據集 22
1.8.4 代碼實現:獲取並改造ResNet模型 27
1.8.5 代碼實現:微調模型後一層 28
1.8.6 代碼實現:使用退化學習率對 模型進行全局微調 29
1.8.7 擴展實例:使用隨機數據增強方法訓練模型 30
1.8.8 擴展:分類模型中常用的3種損失函數 31
1.8.9 擴展實例:樣本均衡 31
1.9 從深度卷積模型中提取視覺特徵 33
1.9.1 使用鉤子函數的方式提取視覺特徵 33
1.9.2 使用重組結構的方式提取視覺特徵 34
第 2章 機器視覺的*應用 37
2.1 基於圖片內容的處理任務 38
2.1.1 目標檢測任務 38
2.1.2 圖片分割任務 38
2.1.3 非極大值抑制算法 39
2.1.4 Mask R-CNN模型 39
2.2 實例:使用Mask R-CNN模型進行目標檢測與語義分割 41
2.2.1 代碼實現:了解PyTorch中目標檢測的內置模型 41
2.2.2 代碼實現:使用PyTorch中目標檢測的內置模型 42
2.2.3 擴展實例:使用內置的預訓練模型進行語義分割 43
2.3 基於視頻內容的處理任務 47
2.4 實例:用GaitSet模型分析人走路的姿態,並進行身份識別 47
2.4.1 步態識別的做法和思路 47
2.4.2 GaitSet模型 48
2.4.3 多層全流程管線 50
2.4.4 水平金字塔池化 51
2.4.5 三元損失 52
2.4.6 樣本介紹:CASIA-B數據集 53
2.4.7 代碼實現:用torch.utils.data接口封裝數據集 54
2.4.8 代碼實現:用torch.utils.data.sampler類創建含多標籤批次數據的採樣器 60
2.4.9 代碼實現:搭建 GaitSet模型 64
2.4.10 代碼實現:自定義三元損失類 67
2.4.11 代碼實現:訓練模型並保存模型權重文件 69
2.4.12 代碼實現:測試模型 72
2.4.13 擴展實例:用深度卷積和池化 優化模型 77
2.4.14 擴展實例:視頻採樣並提取 輪廓 78
2.4.15 步態識別模型的局限性 79
2.5 調試技巧 79
2.5.1 解決顯存過滿損失值為0問題 80
2.5.2 跟踪PyTorch顯存並查找顯存洩露點 81
第3章 自然語言處理的相關應用 83
3.1 BERT模型與NLP任務的發展階段 84
3.1.1 基礎的神經網絡階段 84
3.1.2 BERTology階段 84
3.2 NLP中的常見任務 84
3.2.1 基於文章處理的任務 85
3.2.2 基於句子處理的任務 85
3.2.3 基於句子中詞的處理任務 86
3.3 實例:訓練中文詞向量 87
3.3.1 CBOW和Skip-Gram模型 87
3.3.2 代碼實現:樣本預處理並生成字典 88
3.3.3 代碼實現:按照Skip-Gram模型的規則製作數據集 90
3.3.4 代碼實現:搭建模型並進行 訓練 92
3.3.5 夾角餘弦 95
3.3.6 代碼實現:詞嵌入可視化 96
3.3.7 詞向量的應用 97
3.4 常用文本處理工具 98
3.4.1 spaCy庫的介紹和安裝 98
3.4.2 與PyTorch深度結合的文本 處理庫torchtext 99
3.4.3 torchtext庫及其內置數據集與 調用庫的安裝 99
3.4.4 torchtext庫中的內置預訓練詞 向量 100
3.5 實例:用TextCNN模型分析評論者是否滿意 100
3.5.1 了解用於文本分類的捲積神經網絡模型——TextCNN 101
3.5.2 樣本介紹:了解電影評論 數據集IMDB 102
3.5.3 代碼實現:引入基礎庫 102
3.5.4 代碼實現:用torchtext加載 IMDB並拆分為數據集 103
3.5.5 代碼實現:加載預訓練詞向量並進行樣本數據轉化 105
3.5.6 代碼實現:定義帶有Mish激活 函數的TextCNN模型 107
3.5.7 代碼實現:用數據集參數實例化 模型 109
3.5.8 代碼實現:用預訓練詞向量 初始化模型 109
3.5.9 代碼實現:用Ranger優化器訓練模型 109
3.5.10 代碼實現:使用模型進行預測 112
3.6 了解Transformers庫 113
3.6.1 Transformers庫的定義 113
3.6.2 Transformers庫的安裝方法 114
3.6.3 查看Transformers庫的版本信息 115
3.6.4 Transformers庫的3層應用 結構 115
3.7 實例: 使用Transformers庫的管道方式完成多種NLP任務 116
3.7.1 在管道方式中指定NLP任務 116
3.7.2 代碼實現:完成文本分類任務 117
3.7.3 代碼實現:完成特徵提取任務 119
3.7.4 代碼實現:完成完形填空任務 120
3.7.5 代碼實現:完成閱讀理解任務 121
3.7.6 代碼實現:完成摘要生成任務 123
3.7.7 預訓練模型文件的組成及其加載時的固定文件名稱 124
3.7.8 代碼實現:完成實體詞識別任務 124
3.7.9 管道方式的工作原理 125
3.7.10 在管道方式中加載指定 模型 127
3.8 Transformers庫中的AutoModel類 128
3.8.1 各種AutoModel類 128
3.8.2 AutoModel類的模型加載機制 129
3.8.3 Transformers庫中更多的預訓練 模型 130
3.9 Transformers庫中的BERTology系列模型 131
3.9.1 Transformers庫的文件結構 131
3.9.2 查找Transformers庫中可以使用的模型 135
3.9.3 實例:用BERT模型實現完形填空任務 136
3.9.4 擴展實例:用 AutoModelWithMHead類 替換BertForMaskedLM類 138
3.10 Transformers庫中的詞表工具 139
3.10.1 PreTrainedTokenizer類中的 特殊詞 139
3.10.2 PreTrainedTokenizer類的 特殊詞使用 140
3.10.3 向PreTrainedTokenizer類中 添加詞 144
3.10.4 實例:用手動加載GPT-2模型 權重的方式將句子補充完整 145
3.10.5 子詞的拆分 148
3.11 BERTology系列模型 149
3.11.1 Transformer之前的主流模型 149
3.11.2 Transformer模型 151
3.11.3 BERT模型 153
3.11.4 GPT-2模型 157
3.11.5 Transformer-XL模型 157
3.11.6 XLNet模型 158
3.11.7 XLNet模型與AE模型和AR 模型間的關係 161
3.11.8 RoBERTa模型 161
3.11.9 SpanBERT模型 162
3.11.10 ELECTRA模型 162
3.11.11 T5模型 163
3.11.12 ALBERT模型 164
3.11.13 DistillBERT模型與知識蒸餾 166
3.12 實例: 用遷移學習訓練BERT模型來對中文分類 167
3.12.1 樣本介紹 167
3.12.2 代碼實現:構建數據集 168
3.12.3 代碼實現:構建並加載BERT預訓練模型 169
3.12.4 BERT模型類的內部邏輯 170
3.12.5 代碼實現:用退化學習率訓練模型 172
3.12.6 擴展:更多的中文預訓練模型 175
3.13 實例:用R-GCN模型理解文本中的代詞 175
3.13.1 代詞數據集 175
3.13.2 R-GCN模型的原理與實現 176
3.13.3 將GAP數據集轉化成圖結構數據的思路 179
3.13.4 代碼實現:用BERT模型提取代詞特徵 181
3.13.5 代碼實現:用BERT模型提取 其他詞特徵 183
3.13.6 用spaCy工具對句子依存 分析 185
3.13.7 代碼實現:使用spaCy和批次 圖方法構建圖數據集 187
3.13.8 代碼實現:搭建多層R-GCN 模型 192
3.13.9 代碼實現:搭建神經網絡 分類層 193
3.13.10 使用5折交叉驗證方法訓練 模型 196
第4章 神經網絡的可解釋性 197
4.1 了解模型解釋庫 198
4.1.1 了解Captum工具 198
4.1.2 可視化可解釋性工具Captum Insights 198
4.2 實例:用可解釋性理解數值分析神經網絡模型 199
4.2.1 代碼實現:載入模型 199
4.2.2 代碼實現:用梯度積分算法分析模型的敏感屬性 200
4.2.3 代碼實現:用Layer Conductance方法查看單個網絡層中的神經元 202
4.2.4 代碼實現:用Neuron Conductance方法查看每個神經元所關注的屬性 204
4.3 實例:用可解釋性理解NLP相關的神經網絡模型 205
4.3.1 詞嵌入模型的可解釋性方法 205
4.3.2 代碼實現:載入模型類並將其處理 過程拆開 206
4.3.3 代碼實現:實例化並加載模型權重,提取模型的詞嵌入層 207
4.3.4 代碼實現:用梯度積分算法計算模型的可解釋性 208
4.3.5 代碼實現:輸出模型可解釋性的可視化圖像 210
4.4 實例:用Bertviz工具可視化BERT模型權重 211
4.4.1 什麼是Bertviz工具 212
4.4.2 代碼實現:載入BERT模型並可視化其權重 212
4.4.3 解讀BERT模型的權重可視化結果 216
4.5 實例:用可解釋性理解圖像處理相關的神經網絡模型 219
4.5.1 代碼實現:載入模型並進行圖像分類 219
4.5.2 代碼實現:用4種可解釋性算法對模型進行可解釋性計算 220
4.5.3 代碼實現:可視化模型的4種可解釋性算法結果 221
4.6 實例:用可解釋性理解圖片分類相關的神經網絡模型 222
4.6.1 了解Grad-CAM方法 223
4.6.2 代碼實現:加載ResNet18模型並註冊鉤子函數提取特徵數據 225
4.6.3 代碼實現:調用模型提取中間層特徵數據和輸出層權重 226
4.6.4 代碼實現:可視化模型的識別區域 227
第5章 識別未知分類的方法——零次 學習 229
5.1 了解零次學習 230
5.1.1 零次學習的思想與原理 230
5.1.2 與零次學習有關的常用數據集 232
5.1.3 零次學習的基本做法 233
5.1.4 直推式學習 233
5.1.5 泛化的零次學習任務 233
5.2 零次學習中的常見問題 233
5.2.1 領域漂移問題 234
5.2.2 原型稀疏性問題 235
5.2.3 語義間隔問題 235
5.3 帶有視覺結構約束的VSC模型 236
5.3.1 分類模型中視覺特徵的本質 236
5.3.2 VSC模型的原理 237
5.3.3 基於視覺中心點學習的約束方法 238
5.3.4 基於倒角距離的視覺結構約束方法 239
5.3.5 什麼是對稱的倒角距離 239
5.3.6 基於二分匹配的視覺結構約束方法 239
5.3.7 什麼是指派問題與耦合矩陣 240
5.3.8 基於W距離的視覺結構約束方法 240
5.3.9 什麼是傳輸 241
5.3.10 什麼是傳輸中的熵 正則化 242
5.4 詳解Sinkhorn 算法 244
5.4.1 Sinkhorn算法的求解轉換 244
5.4.2 Sinkhorn算法的原理 245
5.4.3 Sinkhorn算法中參數ε的 原理 246
5.4.4 舉例Sinkhorn算法過程 246
5.4.5 Sinkhorn算法中的質量守恆 248
5.4.6 Sinkhorn算法的代碼實現 250
5.5 實例:使用VSC模型來識別未知類別的鳥類圖片 252
5.5.1 樣本介紹:用於ZSL任務的鳥類數據集 252
5.5.2 代碼實現:用遷移學習的方式獲得 訓練數據集分類模型 253
5.5.3 使用分類模型提取圖片視覺 特徵 254
5.5.4 代碼實現:用多層圖卷積神經 網絡實現VSC模型 255
5.5.5 代碼實現:基於W距離的損失 函數 256
5.5.6 加載數據並進行訓練 257
5.5.7 代碼實現:根據特徵距離對圖片 進行分類 258
5.6 針對零次學習的性能分析 259
5.6.1 分析視覺特徵的質量 259
5.6.2 分析直推式學習的效果 260
5.6.3 分析直推模型的能力 261
5.6.4 分析未知類別的聚類效果 262
5.6.5 清洗測試集 263
5.6.6 利用可視化方法進行輔助分析 264
第6章 異構圖神經網絡 267
6.1 異構圖的基礎知識 268
6.1.1 同構圖與異構圖 268
6.1.2 什麼是異構圖神經網絡 268
6.1.3 二分圖 268
6.1.4 局部圖卷積 270
6.2 二分圖的實現方式 270
6.2.1 用NetworkX實現二分圖 270
6.2.2 使用DGL構建二分圖 272
6.2.3 二分圖對象的調試技巧 275
6.3 異構圖的實現方式 276
6.3.1 創建異構圖 276
6.3.2 設置異構圖的節點個數 277
6.3.3 異構圖結構的查看方式 278
6.3.4 異構圖與同構圖的相互轉化 280
6.3.5 異構圖與同構圖的屬性操作方式 281
6.4 隨機行走採樣 282
6.4.1 什麼是隨機行走 283
6.4.2 普通隨機行走 283
6.4.3 帶停止概率的隨機行走 284
6.4.4 帶路徑概率的隨機行走 284
6.4.5 基於原圖的隨機行走 285
6.4.6 在基於異構圖的隨機行走中設置停止概率 286
6.4.7 基於隨機行走採樣的數據處理 287
6.4.8 以隨機行走的方式對鄰居節點採樣 287
6.5 DGL庫中的塊圖結構 289
6.5.1 設計塊圖的動機 289
6.5.2 將同構圖轉化成塊圖 290
6.5.3 塊圖的屬性操作 290
6.5.4 將二分圖轉化成塊圖 291
6.6 實例:使用PinSAGE模型搭建推薦系統 292
6.6.1 準備MoiveLens數據集 292
6.6.2 代碼實現:用Panadas庫加載數據 293
6.6.3 Categories與category 類型 294
6.6.4 代碼實現:生成異構圖 295
6.6.5 代碼實現:用邊分組方法拆分並保存數據集 296
6.6.6 PinSAGE模型 299
6.6.7 代碼實現:構建帶有鄰居節點採樣功能的數據加載器 300
6.6.8 代碼實現:PinSAGE模型的採樣 過程 305
6.6.9 代碼實現:搭建PinSAGE模型 309
6.6.10 代碼實現:實例化PinSAGE模型類並進行訓練 315
6.6.11 代碼實現:用PinSAGE模型為 用戶推薦電影 315
6.6.12 擴展:在PinSAGE模型中融合 更多的特徵數據 317
6.7 總結 317


作者介紹


李金洪, 精通C、Python、Java語言,擅長神經網絡、算法、協議分析、移動互聯網安全架構等技術,先後擔任過CAD算法工程師、架構師、項目經理、部門經理等職位。參與過深度學習領域某移動互聯網後台的OCR項目,某娛樂節目機器人的語音識別、聲紋識別項目,金融領域的若干分類項目。




相關書籍

Meta-Analytics: Consensus Approaches and System Patterns for Data Analysis

作者 Simske Steven

2021-12-01

Python Concurrency with Asyncio

作者 Fowler Matthew

2021-12-01

演算法:最強彩色圖鑑 + Python 程式實作 -– 王者歸來 (全彩印刷第二版)

作者 洪錦魁

2021-12-01