PaperNotes(15)-图神经网络、PyG极简版入门笔记
圖神經(jīng)網(wǎng)絡(luò)概況
- 1.GNN,GCN,GE的區(qū)別
- 2.圖卷積的通式--矩陣該如何作用
- 2.1實現(xiàn)1
- 2.2實現(xiàn)2
- 2.3實現(xiàn)3
- 3.PyTorch geometric
- 3.1 PyG內(nèi)置數(shù)據(jù)集
- 3.1.1ENZYMES dataset
- 3.1.2Cora
- 3.2 PyG自定義數(shù)據(jù)集
- 3.2.1Data構(gòu)建簡單的圖結(jié)構(gòu)
- 3.2.2 Dataset
- 3.2.3 InMemoryDataset
一文讀懂圖卷積GCN(https://zhuanlan.zhihu.com/p/89503068)讀書筆記
本文更強調(diào)的是空域卷積,比較簡單的介紹。
1.GNN,GCN,GE的區(qū)別
Graph Embedding:表示學習的范疇,將圖中節(jié)點/將整個圖表示為低維、實值、稠密的向量。(可以將用戶表示成向量的形式,再勇于節(jié)點分類任務)圖嵌入的方式有三種:矩陣分解,deepWalk, 圖神經(jīng)網(wǎng)絡(luò)
Graph Neural Netvork:神經(jīng)網(wǎng)絡(luò)在圖上應用的模型統(tǒng)稱。依據(jù)傳播的方式不同,可以分為圖卷積神經(jīng)網(wǎng)絡(luò),圖注意力網(wǎng)絡(luò),圖LSTM。(本質(zhì)還是將網(wǎng)絡(luò)結(jié)構(gòu)技巧借鑒過來做新的嘗試)。
Graph Convolutional Network:采用卷積操作圖神經(jīng)網(wǎng)絡(luò),是最經(jīng)典的圖神經(jīng)網(wǎng)絡(luò)。引發(fā)了無數(shù)的改進工作。
一句話概括三者的關(guān)系:GCN是一類GNN,GNN可以實現(xiàn)GE。
現(xiàn)實需求:現(xiàn)實中,像圖像一樣排列整齊的數(shù)據(jù)只占很小的一部分,還有更大的一部分數(shù)據(jù)以圖的形式存儲(社交網(wǎng)絡(luò)的信息,知識圖譜,蛋白質(zhì)網(wǎng)絡(luò),萬維度網(wǎng))
提出疑問:能夠類似于圖像領(lǐng)域的卷積操作一樣,具有一個通用的范式來抽取圖像特征呢?–圖卷積(處理非結(jié)構(gòu)化數(shù)據(jù)的利器)
2.圖卷積的通式–矩陣該如何作用
圖的表示:
圖G=(V,E)G=(V,E)G=(V,E),其中VVV為節(jié)點的集合,EEE為邊的集合。對于每個節(jié)點i,均有特征向量xix_ixi?,可以用矩陣XN?DX_{N*D}XN?D?表示。
圖相關(guān)矩陣:(Laplacian矩陣的定義是否有具體含義?)
度矩陣D-對角陣,對角線元素為各個結(jié)點的度,無向圖:與該頂點相關(guān)聯(lián)的邊數(shù);有向圖:入度和出度
鄰接矩陣A:表示結(jié)點間關(guān)系,無向圖:對稱矩陣,有邊即為1;有向圖:有向連接才為1。
Laplacian 矩陣L:L=D-A
圖卷積核心思想:每個節(jié)點受到鄰居節(jié)點的影響,通式:
Hl+1=f(Hl,A)H^{l+1}=f(H^l,A)Hl+1=f(Hl,A)
其中:H0=XH^0=XH0=X為圖的特征矩陣,fff的差異定義了不同算法的差異。
2.1實現(xiàn)1
Hl+1=σ(AHlWl)H^{l+1}=\sigma(AH^lW^l)Hl+1=σ(AHlWl)
出發(fā)點:結(jié)點特征與鄰居結(jié)點的特征有關(guān),鄰居結(jié)點各個維度特征的加權(quán)和。多層疊加后能夠利用多層鄰居的信息。
存在的問題:沒有考慮結(jié)點對自身的影響;A沒有被規(guī)范化時,鄰居結(jié)點多的結(jié)點擁有更大的影響力。
2.2實現(xiàn)2
Hl+1=σ(LHlWl)H^{l+1} = \sigma(LH^lW^l)Hl+1=σ(LHlWl)
使用Laplacian 矩陣(Combinatorial Laplacian?),對角線未知非零;解決了沒有考慮自身結(jié)點信息自傳遞的問題。
2.3實現(xiàn)3
利用Symmetric normalized Laplacian同時解決兩個問題:自傳遞和歸一化的問題。
歸一化的Laplacian矩陣具有多種形式,這些矩陣其實就是對應的圖卷積核。
3.PyTorch geometric
PyTorch geometric–基于PyTorch的用于處理不規(guī)則數(shù)據(jù)(圖)的庫,能夠用于快速實現(xiàn)圖等數(shù)據(jù)的表征學習的框架。
PyG-document
對機器學習庫最關(guān)心的內(nèi)容:數(shù)據(jù)規(guī)范,模型定義,參數(shù)學習,模型測試
3.1 PyG內(nèi)置數(shù)據(jù)集
PyTorch Geometric 包含了很多常見的基本數(shù)據(jù)集,例如:Cora, Citeseer, Pubmed
3.1.1ENZYMES dataset
graph-level數(shù)據(jù)集載入demo–ENZYMES dataset, 包含6大類,一共60個圖,能夠用于graph-level的分類任務。
from torch_geometric.datasets import TUDataset # graph_level demo dataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES') # 會下載,不過很快就下載完了 print("數(shù)據(jù)集的大小(有多少張圖):", len(dataset)) print("圖的類別數(shù):", dataset.num_classes) print("圖中結(jié)點的特征數(shù):", dataset.num_node_features)print("第i張圖:", dataset[2]) print("圖為有向圖否:", dataset[2].is_undirected())輸出
數(shù)據(jù)集的大小(有多少張圖): 600 圖的類別數(shù): 6 圖中結(jié)點的特征數(shù): 3 第i張圖: Data(edge_index=[2, 92], x=[25, 3], y=[1]) 圖為有向圖否: True3.1.2Cora
node-level 數(shù)據(jù)集載入demo–Cora,依據(jù)科學論文之間相互引用關(guān)系而構(gòu)建的Graph數(shù)據(jù)集,一共包括2708篇論文,共7類:Genetic_Algorithms,Neural_Networks,Probabilistic_Methods,Reinforcement_Learning,Rule_Learning,Theory
# node_level demofrom torch_geometric.datasets import Planetoiddataset2 = Planetoid(root='/tmp/Cora', name='Cora') # 自動下載稍微有慢 # 直接上數(shù)據(jù)倉庫中下載數(shù)據(jù)后放入/tmp/Cora/raw 文件夾著中 # cp ~/Downloads/planetoid-master/data/*cora* ./raw # 處理完后會多一個processed 文件夾print("數(shù)據(jù)集的大小(有多少張圖):", len(dataset2)) print("圖的類別數(shù):", dataset2.num_classes) print("圖中結(jié)點的特征數(shù):", dataset2.num_node_features)print("第i張圖:", dataset2[0]) print("圖為有向圖否:", dataset2[0].is_undirected())print("訓練結(jié)點數(shù):", dataset2[0].train_mask.sum().item()) print("測試結(jié)點數(shù):", dataset2[0].test_mask.sum().item()) print("驗證結(jié)點數(shù):", dataset2[0].val_mask.sum().item())輸出
數(shù)據(jù)集的大小(有多少張圖): 1 圖的類別數(shù): 7 圖中結(jié)點的特征數(shù): 1433 第i張圖: Data(edge_index=[2, 10556], test_mask=[2708], train_mask=[2708], val_mask=[2708], x=[2708, 1433], y=[2708]) 圖為有向圖否: True 訓練結(jié)點數(shù): 140 測試結(jié)點數(shù): 1000 驗證結(jié)點數(shù): 5003.2 PyG自定義數(shù)據(jù)集
3.2.1Data構(gòu)建簡單的圖結(jié)構(gòu)
利用torch_geometric.data.Data()建模下圖:四個結(jié)點v0,v1,v2,v3v_0,v_1,v_2,v_3v0?,v1?,v2?,v3?,每個結(jié)點帶有特征向量[2,1],[5,6],[3,7],[12,0][2,1],[5,6],[3,7],[12,0][2,1],[5,6],[3,7],[12,0],并且每個結(jié)點的目標值/目標類別分別為:0,1,010,1,010,1,01
Data()的參數(shù)屬性:
建模代碼demo:
import torch from torch_geometric.data import Data x = torch.tensor([[2, 1], [5, 6], [3, 7], [12, 0]], dtype=torch.float) # 每個結(jié)點的特征向量 y = torch.tensor([0, 1, 0, 1], dtype=torch.float) # 結(jié)點的目標值 edge_index = torch.tensor([[0, 1, 2, 0, 3], [1, 0, 1, 3, 2]], dtype=torch.long) data = Data(x=x, y=y, edge_index=edge_index) print(data)輸出:
Data(edge_index=[2, 5], x=[4, 2], y=[4]) # 方括號中為各個矩陣的尺寸,其中包括5條邊,4個維度為2的特征向量,和4個標亮目標值。3.2.2 Dataset
Dataset,適用于較大的數(shù)據(jù)集
torch_geometric.data.Dataset
3.2.3 InMemoryDataset
InMemoryDataset,適用于RAM的數(shù)據(jù)
torch_geometric.data.InMemoryDataset # 繼承自torch_geometric.data.Dataset
目前關(guān)注的還不是創(chuàng)建自己的數(shù)據(jù)集合,回頭再來
PyTorch geometric官方文檔,安裝啦,簡單使用啦:https://pytorch-geometric.readthedocs.io/en/latest/notes/introduction.html
使用參考博文1–圖神經(jīng)網(wǎng)絡(luò)庫PyTorch geometric(PYG)零基礎(chǔ)上手教程:https://zhuanlan.zhihu.com/p/91229616
使用參考博文2–圖神經(jīng)網(wǎng)絡(luò)之神器——PyTorch Geometric 上手 & 實戰(zhàn):https://zhuanlan.zhihu.com/p/94491664
總結(jié)
以上是生活随笔為你收集整理的PaperNotes(15)-图神经网络、PyG极简版入门笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (十二)nodejs循序渐进-高性能游戏
- 下一篇: 帧同步和状态同步(一)