PyTorch 深度學習和圖神經網絡 捲1 基礎知識

李金洪

  • PyTorch 深度學習和圖神經網絡 捲1 基礎知識-preview-1
  • PyTorch 深度學習和圖神經網絡 捲1 基礎知識-preview-2
PyTorch 深度學習和圖神經網絡 捲1 基礎知識-preview-1

買這商品的人也買了...

相關主題

商品描述

本書從基礎知識開始,介紹深度學習與圖神經網絡相關的一系列技術與實現方法,主要內容包括PyTorch的使用、神經網絡的原理、神經網絡的基礎模型、圖神經網絡的基礎模型。書中側重講述與深度學習基礎相關的網絡模型和算法思想,以及圖神經網絡的原理,且針對這些知識點給出在PyTorch框架上的實現代碼。

本書適合想學習圖神經網絡的技術人員、人工智能從業人員閱讀,也適合作為大專院校相關專業的師生用書和培訓班的教材。

作者簡介

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

目錄大綱

目錄
第 一篇 入門——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
第2篇 基礎——神經網絡的監督訓練與無監督訓練
第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