预购商品
书目分类
特别推荐
本書從基礎知識開始,介紹深度學習與圖神經網路相關的一系列技術與實現方法,主要內容包括PyTorch的使用、神經網路的原理、神經網路的基礎模型、圖神經網路的基礎模型。書中側重講述與深度學習基礎相關的網路模型和演算法思想,以及圖神經網路的原理,且針對這些知識點給出在PyTorch框架上的實現代碼。本書適合想學習圖神經網路的技術人員、人工智慧從業人員閱讀,也適合作為大專院校相關專業的師生用書和培訓班的教材。
第一篇 入門——PyTorch基礎 第1章 快速瞭解人工智慧與PyTorch 3 1.1 圖神經網路與深度學習 4 1.1.1 深度神經網路 4 1.1.2 圖神經網路 4 1.2 PyTorch是做什麼的 4 1.3 PyTorch的特點 5 1.4 PyTorch與TensorFlow各有所長 6 1.5 如何使用本書學好深度學習 8 第2章 搭建開發環境 9 2.1 下載及安裝Anaconda 10 2.1.1 下載Anaconda開發工具 10 2.1.2 安裝Anaconda開發工具 10 2.1.3 安裝Anaconda開發工具時的注意事項 11 2.2 安裝PyTorch 11 2.2.1 打開PyTorch官網 12 2.2.2 配置PyTorch安裝命令 12 2.2.3 使用配置好的命令安裝PyTorch 12 2.2.4 配置PyTorch的鏡像源 13 2.3 熟悉Anaconda 3的開發工具 15 2.3.1 快速瞭解Spyder 15 2.3.2 快速瞭解Jupyter Notebook 17 2.4 測試開發環境 18 第3章 PyTorch基本開發步驟——用邏輯回歸擬合二維資料 19 3.1 實例1:從一組看似混亂的資料中找出規律 20 3.1.1 準備數據 20 3.1.2 定義網路模型 21 3.1.3 搭建網路模型 22 3.1.4 訓練模型 23 3.1.5 視覺化訓練結果 23 3.1.6 使用及評估模型 24 3.1.7 視覺化模型 25 3.2 模型是如何訓練出來的 26 3.2.1 模型裡的內容及意義 26 3.2.2 模型內部資料流程向 27 3.3 總結 27 第4章 快速上手PyTorch 29 4.1 神經網路中的幾個基底資料型別 30 4.2 張量類的基礎 30 4.2.1 定義張量的方法 30 4.2.2 張量的類型 32 4.2.3 張量的type()方法 33 4.3 張量與NumPy 34 4.3.1 張量與NumPy類型資料的相互轉換 34 4.3.2 張量與NumPy各自的形狀獲取 34 4.3.3 張量與NumPy各自的切片操作 34 4.3.4 張量與NumPy類型資料相互轉換間的陷阱 35 4.4 在CPU和GPU控制的記憶體中定義張量 36 4.4.1 將CPU記憶體中的張量轉化到GPU記憶體中 36 4.4.2 直接在GPU記憶體中定義張量 36 4.4.3 使用to()方法來 設備 36 4.4.4 使用環境變數CUDA_VISIBLE_DEVICES來 設備 36 4.5 生成隨機值張量 37 4.5.1 設置隨機值種子 37 4.5.2 按照 形狀生成隨機值 37 4.5.3 生成線性空間的隨機值 37 4.5.4 生成對數空間的隨機值 38 4.5.5 生成未初始化的矩陣 38 4.5.6 多的隨機值生成函數 38 4.6 張量間的數學運算 38 4.6.1 PyTorch的運算函數 39 4.6.2 PyTorch的自變化運算函數 39 4.7 張量間的資料操作 39 4.7.1 用torch.reshape()函數實現資料維度變換 39 4.7.2 實現張量資料的矩陣轉置 40 4.7.3 view()方法與contiguous()方法 40 4.7.4 用torch.cat()函數實現資料連接 41 4.7.5 用torch.chunk()函數實現資料均勻分割 41 4.7.6 用torch.split()函數實現資料不均勻分割 42 4.7.7 用torch.gather()函數對張量資料進行檢索 42 4.7.8 按照 閾值對張量進行過濾 42 4.7.9 找出張量中的非零值索引 43 4.7.10 根據條件進行多張量取值 43 4.7.11 根據閾值進行資料截斷 43 4.7.12 獲取資料中 值、 小值的索引 43 4.8 Variable類型與自動微分模組 44 4.8.1 自動微分模組簡介 44 4.8.2 Variable物件與張量物件之間的轉化 44 4.8.3 用no_grad()與enable_grad()控制梯度計算 45 4.8.4 函數torch.no_grad()介紹 45 4.8.5 函數enable_grad()與no_grad()的嵌套 46 4.8.6 用set_grad_enabled()函數統一管理梯度計算 47 4.8.7 Variable物件的grad_fn屬性 47 4.8.8 Variable物件的is_leaf屬性 48 4.8.9 用backward()方法自動求導 48 4.8.10 自動求導的作用 49 4.8.11 用detach()方法將Variable物件分離成葉子節點 49 4.8.12 volatile屬性擴展 50 4.9 定義模型結構的步驟與方法 50 4.9.1 代碼實現: Module類的使用方法 50 4.9.2 模型中的參數Parameters類 52 4.9.3 為模型添加參數 53 4.9.4 從模型中獲取參數 53 4.9.5 保存與載入模型 56 4.9.6 模型結構中的鉤子函數 57 4.10 模型的網路層 58 第5章 神經網路的基本原理與實現 59 5.1 瞭解深度學習中的神經網路與神經元 60 5.1.1 瞭解單個神經元 60 5.1.2 生物神經元與電腦神經元模型的結構相似性 62 5.1.3 生物神經元與電腦神經元模型的工作流程相似性 63 5.1.4 神經網路的形成 63 5.2 深度學習中的基礎神經網路模型 63 5.3 什麼是全連接神經網路 64 5.3.1 全連接神經網路的結構 64 5.3.2 實例2:分析全連接神經網路中每個神經元的作用 64 5.3.3 全連接神經網路的擬合原理 66 5.3.4 全連接神經網路的設計思想 67 5.4 啟動函數——加入非線性因素,彌補線性模型缺陷 68 5.4.1 Sigmoid函數 68 5.4.2 tanh函數 69 5.4.3 ReLU函數 70 5.4.4 啟動函數的多種形式 72 5.4.5 擴展1: 好的啟動函數(Swish與Mish) 73 5.4.6 擴展2: 適合NLP任務的啟動函數(GELU) 74 5.5 啟動函數總結 75 5.6 訓練模型的步驟與方法 76 5.7 神經網路模組(nn)中的損失函數 76 5.7.1 L1損失函數 76 5.7.2 均值平方差(MSE)損失函數 77 5.7.3 交叉熵損失(CrossEntropyLoss)函數 77 5.7.4 其他的損失函數 78 5.7.5 總結:損失演算法的選取 79 5.8 Softmax演算法——處理分類問題 79 5.8.1 什麼是Softmax 80 5.8.2 Softmax原理 80 5.8.3 常用的Softmax介面 80 5.8.4 實例3:Softmax與交叉熵的應用 81 5.8.5 總結: 好地認識Softmax 82 5.9 優化器模組 82 5.9.1 瞭解反向傳播與BP演算法 82 5.9.2 優化器與梯度下降 83 5.9.3 優化器的類別 83 5.9.4 優化器的使用方法 83 5.9.5 查看優化器的參數結構 84 5.9.6 常用的優化器——Adam 85 5.9.7 好的優化器——Ranger 85 5.9.8 如何選取優化器 85 5.10 退化學習率——在訓練的速度與精度之間找到平衡 86 5.10.1 設置學習率的方法——退化學習率 86 5.10.2 退化學習率介面(lr_scheduler) 87 5.10.3 使用lr_scheduler介面實現多種退化學習率 88 5.11 實例4:預測泰坦尼克號船上的生存乘客 91 5.11.1 載入樣本 91 5.11.2 樣本的特徵分析——離散資料與連續資料 92 5.11.3 處理樣本中的離散資料和Nan值 93 5.11.4 分離樣本和標籤並製作成資料集 95 5.11.5 定義Mish啟動函數與多層全連接網路 96 5.11.6 訓練模型並輸出結果 97 第二篇 基礎——神經網路的監督訓練與無監督訓練 第6章 實例5:識別黑白圖中的服裝圖案 101 6.1 熟悉樣本:瞭解Fashion-MNIST資料集 102 6.1.1 Fashion-MNIST的起源 102 6.1.2 Fashion-MNIST的結構 102 6.1.3 手動下載Fashion-MNIST資料集 103 6.1.4 代碼實現:自動下載Fashion-MNIST資料集 103 6.1.5 代碼實現:讀取及顯示Fashion-MNIST中的資料 104 6.2 製作批次資料集 105 6.2.1 資料集封裝類DataLoader 105 6.2.2 代碼實現:按批次封裝Fashion-MNIST資料集 106 6.2.3 代碼實現:讀取批次資料集 107 6.3 構建並訓練模型 108 6.3.1 代碼實現:定義模型類 108 6.3.2 代碼實現:定義損失的計算方法及優化器 110 6.3.3 代碼實現:訓練模型 110 6.3.4 代碼實現:保存模型 111 6.4 載入模型,並用其進行預測 111 6.5 評估模型 112 6.6 擴展:多顯卡並行訓練 113 6.6.1 代碼實現:多顯卡訓練 113 6.6.2 多顯卡訓練過程中,保存與讀取模型檔的注意事項 115 6.6.3 在切換設備環境時,保存與讀取模型檔的注意事項 116 6.6.4 處理顯存殘留問題 116 第7章 監督學習中的神經網路 119 7.1 從視覺的角度理解卷積神經網路 120 7.1.1 生物視覺系統原理 120 7.1.2 微積分 120 7.1.3 離散微分與離散積分 120 7.1.4 視覺神經網路中的離散積分 121 7.2 卷積神經網路的結構 121 7.2.1 卷積神經網路的工作過程 122 7.2.2 卷積神經網路與全連接網路的區別 123 7.2.3 瞭解1D卷積、2D卷積和3D卷積 123 7.2.4 實例分析:Sobel運算元的原理 123 7.2.5 深層神經網路中的卷積核 126 7.2.6 理解卷積的數學意義——卷積分 126 7.3 卷積神經網路的實現 127 7.3.1 瞭解卷積介面 127 7.3.2 卷積操作的類型 129 7.3.3 卷積參數與卷積結果的計算規則 130 7.3.4 實例6:卷積函數的使用 130 7.3.5 實例7:使用卷積提取圖片的輪廓 135 7.4 深層卷積神經網路 138 7.4.1 深層卷積神經網路組成 138 7.4.2 池化操作 140 7.4.3 瞭解池化介面 140 7.4.4 實例8:池化函數的使用 141 7.4.5 實例9:搭建卷積神經網路 143 7.5 迴圈神經網路結構 145 7.5.1 瞭解人的記憶原理 145 7.5.2 迴圈神經網路的應用領域 146 7.5.3 迴圈神經網路的正向傳播過程 147 7.5.4 BP演算法與BPTT演算法的原理 148 7.5.5 實例10:簡單迴圈神經網路實現——設計一個退位減法器 149 7.6 常見的迴圈神經網路單元及結構 154 7.6.1 長短記憶(LSTM)單元 155 7.6.2 門控迴圈單元(GRU) 157 7.6.3 只有忘記門的LSTM(JANET)單元 158 7.6.4 獨立迴圈(IndRNN)單元 158 7.6.5 雙向RNN結構 159 7.7 實例11:用迴圈神經網路訓練語言模型 160 7.7.1 什麼是語言模型 161 7.7.2 詞表與詞向量 161 7.7.3 詞向量的原理與實現 161 7.7.4 NLP中多項式分佈 162 7.7.5 迴圈神經網路的實現 163 7.7.6 實現語言模型的思路與步驟 164 7.7.7 代碼實現:準備樣本 165 7.7.8 代碼實現:構建迴圈神經網路(RNN)模型 167 7.7.9 代碼實現:產生實體模型類,並訓練模型 168 7.7.10 代碼實現:運行模型生成句子 171 7.8 過擬合問題及優化技巧 172 7.8.1 實例12:訓練具有過擬合問題的模型 172 7.8.2 改善模型過擬合的方法 175 7.8.3 瞭解正則化 175 7.8.4 實例13:用L2正則改善模型的過擬合狀況 176 7.8.5 實例14:通過增大資料集改善模型的過擬合狀況 178 7.8.6 Dropout方法 179 7.8.7 實例15: 通過Dropout方法改善模型的過擬合狀況 180 7.8.8 全連接網路的深淺與泛化能力的聯繫 182 7.8.9 瞭解批量歸一化(BN)演算法 182 7.8.10 實例16: 手動實現批量歸一化的計算方法 185 7.8.11 實例17: 通過批量歸一化方法改善模型的過擬合狀況 187 7.8.12 使用批量歸一化方法時的注意 事項 188 7.8.13 擴展:多種批量歸一化演算法介紹 188 7.9 神經網路中的注意力機制 189 7.9.1 注意力機制的實現 189 7.9.2 注意力機制的軟、硬模式 190 7.9.3 注意力機制模型的原理 190 7.9.4 多頭注意力機制 191 7.9.5 自注意力機制 192 7.10 實例18:利用注意力迴圈神經網路對圖片分類 192 7.10.1 迴圈神經網路處理圖片分類任務的原理 192 7.10.2 代碼實現:搭建LSTM網路模型 193 7.10.3 代碼實現:構建注意力機制類 193 7.10.4 代碼實現:構建輸入資料並訓練模型 196 7.10.5 使用並評估模型 197 7.10.6 擴展1:使用梯度剪輯技巧優化訓練過程 197 7.10.7 擴展2:使用JANET單元完成RNN 198 7.10.8 擴展3:使用IndRNN單元實現RNN 198 第8章 無監督學習中的神經網路 199 8.1 快速瞭解資訊熵 200 8.1.1 資訊熵與概率的計算關係 200 8.1.2 聯合熵 202 8.1.3 條件熵 202 8.1.4 交叉熵 203 8.1.5 相對熵——KL散度 203 8.1.6 JS散度 204 8.1.7 互信息 204 8.2 通用的無監督模型——自編碼神經網路與對抗神經網路 205 8.3 自編碼神經網路 206 8.3.1 自編碼神經網路的結構 206 8.3.2 自編碼神經網路的計算過程 206 8.3.3 自編碼神經網路的作用與意義 207 8.3.4 變分自編碼神經網路 207 8.3.5 條件變分自編碼神經網路 208 8.4 實例19:用變分自編碼神經網路模型生成類比資料 208 8.4.1 變分自編碼神經網路模型的結構介紹 208 8.4.2 代碼實現:引入模組並載入樣本 209 8.4.3 代碼實現:定義變分自編碼神經網路模型的正向結構 210 8.4.4 變分自編碼神經網路模型的反向傳播與KL散度的應用 211 8.4.5 代碼實現:完成損失函數和訓練函數 212 8.4.6 代碼實現:訓練模型並輸出視覺化結果 213 8.4.7 代碼實現:提取樣本的低維特徵並進行視覺化 214 8.4.8 代碼實現:視覺化模型的輸出空間 215 8.5 實例20:用條件變分自編碼神經網路生成可控類比資料 216 8.5.1 條件變分自編碼神經網路的實現 216 8.5.2 代碼實現:定義條件變分自編碼神經網路模型的正向結構 217 8.5.3 代碼實現:訓練模型並輸出視覺化結果 218 8.6 對抗神經網路 219 8.6.1 對抗神經網路的工作過程 219 8.6.2 對抗神經網路的作用 220 8.6.3 GAN模型難以訓練的原因 220 8.6.4 WGAN模型——解決GAN難以訓練的問題 221 8.6.5 分析WGAN的不足 222 8.6.6 WGAN-gp模型—— 容易訓練的GAN模型 223 8.6.7 條件GAN 2248.6.8 帶有W散度的GAN——WGAN-div 225 8.7 實例21:用WGAN-gp模型生成類比資料 226 8.7.1 DCGAN中的全卷積 226 8.7.2 上採樣與下採樣 227 8.7.3 實例歸一化 228 8.7.4 代碼實現:引入模組並載入樣本 228 8.7.5 代碼實現:定義生成器與判別器 229 8.7.6 啟動函數與歸一化層的位置關係 231 8.7.7 代碼實現:定義數完成梯度懲罰項 234 8.7.8 代碼實現:定義模型的訓練函數 235 8.7.9 代碼實現:定義函數,視覺化模型結果 237 8.7.10 代碼實現:調用函數並訓練模型 237 8.7.11 練習題 238 8.8 實例22:用條件GAN生成可控類比資料 239 8.8.1 代碼實現:定義條件GAN模型的正向結構 239 8.8.2 代碼實現:調用函數並訓練模型 240 8.9 實例23:實現帶有W散度的GAN——WGAN-div模型 241 8.9.1 代碼實現:完成W散度的損失函數 241 8.9.2 代碼實現:定義訓練函數來訓練模型 242 8.10 散度在神經網路中的應用 243 8.10.1 f-GAN框架 243 8.10.2 基於f散度的變分散度 小化方法 243 8.10.3 用Fenchel共軛函數實現f-GAN 244 8.10.4 f-GAN中判別器的啟動函數 246 8.10.5 互資訊神經估計 247 8.10.6 實例24:用神經網路估計互資訊 249 8.10.7 穩定訓練GAN模型的經驗和技巧 252 8.11 實例25:用 化深度互資訊模型執行圖片搜索器 253 8.11.1 DIM模型的原理 254 8.11.2 DIM模型的結構 254 8.11.3 代碼實現:載入CIFAR資料集 257 8.11.4 代碼實現:定義DIM模型 260 8.11.5 代碼實現:產生實體DIM模型並進行訓練 262 8.11.6 代碼實現:載入模型搜索圖片 264 第9章 快速瞭解圖神經網路——少量樣本也可以訓練模型 269 9.1 圖神經網路的相關基礎知識 270 9.1.1 歐氏空間與非歐氏空間 270 9.1.2 圖 270 9.1.3 圖相關的術語和度量 270 9.1.4 圖神經網路 271 9.1.5 GNN的動機 271 9.2 矩陣的基礎 272 9.2.1 轉置矩陣 272 9.2.2 對稱矩陣及其特性 272 9.2.3 對角矩陣與單位矩陣 272 9.2.4 哈達馬積 273 9.2.5 點積 273 9.2.6 對角矩陣的特性與操作方法 273 9.2.7 度矩陣與鄰接矩陣 275 9.3 鄰接矩陣的幾種操作 275 9.3.1 獲取有向圖的短邊和長邊 276 9.3.2 將有向圖的鄰接矩陣轉成無向圖的鄰接矩陣 277 9.4 實例26:用圖卷積神經網路為論文分類 278 9.4.1 CORA資料集 278 9.4.2 代碼實現:引入基礎模組並設置運行環境 279 9.4.3 代碼實現:讀取並解析論文數據 279 9.4.4 代碼實現:讀取並解析論文關係資料 281 9.4.5 代碼實現:加工圖結構的矩陣資料 283 9.4.6 代碼實現:將資料轉為張量,並分配運算資源 284 9.4.7 代碼實現:定義Mish啟動函數與圖卷積操作類 284 9.4.8 代碼實現:搭建多層圖卷積網路 286 9.4.9 代碼實現:用Ranger優化器訓練模型並視覺化結果 287 9.5 圖卷積神經網路 290 9.5.1 圖結構與拉普拉斯矩陣的關係 290 9.5.2 拉普拉斯矩陣的3種形式 291 9.6 擴展實例:用Multi-sample Dropout優化模型的訓練速度 291 9.6.1 Multi-sample Dropout方法 292 9.6.2 代碼實現:為圖卷積模型添加 Multi-sample Dropout方法 292 9.6.3 代碼實現:使用帶有Multi-sample Dropout方法的圖卷積模型 293 9.7 從圖神經網路的視角看待深度學習 294 9.8 圖神經網路使用拉普拉斯矩陣的原因 295 9.8.1 節點與鄰接矩陣的點積作用 295 9.8.2 拉普拉斯矩陣的點積作用 296 9.8.3 重新審視圖卷積的擬合本質 296 9.8.4 點積計算並不是 方法 296 第10章 基於空間域的圖神經網路實現 297 10.1 重新認識圖卷積神經網路 298 10.1.1 基於譜域的圖處理 298 10.1.2 基於頂點域的圖處理 298 10.1.3 基於頂點域的圖卷積 298 10.1.4 圖卷積的特性 299 10.2 實例27:用圖注意力神經網路為論文分類 300 10.2.1 圖注意力網路 300 10.2.2 工程部署 301 10.2.3 代碼實現:對鄰接矩陣進行對稱歸一化拉普拉斯矩陣轉化 301 10.2.4 代碼實現:搭建圖注意力神經網路層 301 10.2.5 代碼實現:搭建圖注意力模型類 302 10.2.6 代碼實現:產生實體圖注意力模型,並進行訓練與評估 303 10.2.7 常用的圖神經網路庫 304 10.3 圖神經網路常用庫——DGL庫 305 10.3.1 DGL庫的實現與性能 305 10.3.2 安裝DGL庫的方法及注意事項 305 10.3.3 DGL庫中的資料集 306 10.3.4 DGL庫中的圖 307 10.3.5 DGL庫中的內聯函數 307 10.3.6 擴展:瞭解PyG庫 307 10.4 DGLGraph圖的基本操作 308 10.4.1 DGLGraph圖的創建與維護 308 10.4.2 查看DGLGraph圖中的度 309 10.4.3 DGLGraph圖與NetWorkx圖的相互轉化 310 10.4.4 NetWorkx庫 311 10.4.5 DGLGraph圖中頂點屬性的操作 313 10.4.6 DGLGraph圖中邊屬性的操作 314 10.4.7 DGLGraph圖屬性操作中的注意事項 314 10.4.8 使用函數對圖的頂點和邊進行計算 315 10.4.9 使用函數對圖的頂點和邊進行過濾 315 10.4.10 DGLGraph圖的消息傳播 316 10.4.11 DGL庫中的多圖處理 317 10.5 實例28:用帶有殘差結構的多層GAT模型實現論文分類 318 10.5.1 代碼實現:使用DGL資料集載入CORA樣本 319 10.5.2 用鄰居聚合策略實現GATConv 321 10.5.3 代碼實現:用DGL庫中的GATConv搭建多層GAT模型 323 10.5.4 代碼實現:使用早停方式訓練模型並輸出評估結果 324 10.6 圖卷積模型的缺陷 327 10.6.1 全連接網路的特徵與缺陷 327 10.6.2 圖卷積模型的缺陷 328 10.6.3 彌補圖卷積模型缺陷的方法 328 10.6.4 從圖結構角度理解圖卷積原理及缺陷 328 10.7 實例29:用簡化圖卷積模型實現論文分類 329 10.7.1 SGC的網路結構 330 10.7.2 DGL庫中SGC模型的實現方式 331 10.7.3 代碼實現:搭建SGC模型並進行訓練 333 10.7.4 擴展: SGC模型的不足 334 10.8 實例30:用圖濾波神經網路模型實現論文分類 334 10.8.1 GfNN的結構 334 10.8.2 代碼實現:搭建GfNN模型並進行訓練 335 10.9 實例31:用深度圖互資訊模型實現論文分類 337 10.9.1 DGI模型的原理與READOUT函數 337 10.9.2 代碼實現:搭建多層SGC網路 338 10.9.3 代碼實現:搭建編碼器和判別器 339 10.9.4 代碼實現:搭建DGI模型並進行訓練 340 10.9.5 代碼實現:利用DGI模型提取特徵並進行分類 342 10.10 實例32:用圖同構網路模型實現論文分類 344 10.10.1 多重集與單射 344 10.10.2 GIN模型的原理與實現 344 10.10.3 代碼實現:搭建多層GIN模型並進行訓練 346 10.11 實例33:用APPNP模型實現論文分類 347 10.11.1 APPNP模型的原理與實現 347 10.11.2 代碼實現:搭建APPNP模型並進行訓練 349 10.12 實例34:用JKNet模型實現論文分類 351 10.12.1 JKNet模型結構 351 10.12.2 代碼實現:修改圖資料的預處理部分 352 10.12.3 代碼實現:搭建JKNet模型並進行訓練 352 10.13 總結 355
李金洪 精通C、Python、Java語言,擅長神經網路、演算、協定分析、移動互聯網安全架構等技術,先後擔任過CAD演算工程師、架構師、專案經理、部門經理等職位。參與過深度學習領域某移動互聯網後臺的OCR項目,某娛樂節目機器人的語音辨識、聲紋識別專案,金融領域的若干分類專案。
最近浏览商品
客服公告
热门活动
订阅电子报