【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
DGL庫是由紐約大學和亞馬遜聯手推出的圖神經網絡框架,支持對異構圖的處理,開源相關異構圖神經網絡的代碼,在GCMC、RGCN等業內知名的模型實現上也取得了很好的效果。
1?DGL庫
1.1?DGL庫的實現與性能
實現GNN并不容易,因為它需要在不規則數據上實現較高的GPU吞吐量。
1.1.1 DGL庫簡介
DGL庫的邏輯層使用了頂點域的處理方式,使代碼更容易理解。同時,又在底層的內存和運行效率方面做了大量的工作,使得框架可以發揮出更好的性能。
1.1.2?DGL庫特點
GCMC:DGL的內存優化支持在一個GPU上對MovieLens10M數據集進行訓練(原實現需要從CPU中動態加載數據),從而將原本需要24小時的訓練時間縮短到1個多小時。
RGCN:使用全新的異構圖接口重新實現了RGCN。減少了內存開銷。
HAN:提供的靈活接口可以將一個異構圖通過元路徑轉變成同構圖。
Metapath2vec:新的元路徑采樣實現比原實現快2倍。
1.1.3 分子化學的模型庫DGL-Chem
該分子庫提供包括分子性質預測和分子結構生成等預訓練模型,以及訓練知識圖譜嵌入專用包DGL-KE。其中DGL-KE的性能更是出色。
在單GPU上,DGL-KE能在7分鐘內使用經典的TransE模型訓練出FB15K的圖嵌入。而GraphVite(v0.1.0)在4個GPU上運算需要14分鐘。
DGL-KE的首個版本發布了TransE、CompEx和Distmut模型,支持CPU訓練、GPU訓練、CPU和GPU混合訓練,以及單機多進程訓練。
1.2 安裝DGL庫
1.2.1 查看本地CUDA版本
CMD中輸入
nvcc --version
1.2.2 查看版本
CUDA對應的DGL版本查詢(64位)https://conda.anaconda.org/dglteam/linux-64
1.2.3 安裝版本
conda install -c dglteam dgl-cuda11.3
1.2.4??卸載DGL
若已經安裝了不需要的DGL版本,比如0.7.1想替換為0.4.3版本,則要刪除現有版本:
默認刪除當前DGL:conda uninstall -c dglteam dgl-cuda10.2
(cuda10.2可根據自己的環境調整)
指定刪除版本:conda uninstall -c dglteam dgl-cuda10.2==0.5.0
(cuda10.2==0.5.0可根據自己的環境調整,使用 conda list 可以查看使用的當前版本)
1.3 DGL庫中的數據集
1.3.1??Sst(Stanford sentiment treebank,斯坦福情感樹庫)
每個樣本都是—個樹結構的句子,葉頂點表示單詞;每個頂點還具有情感注釋,共分為5類(非常消極、消極、中立、積極、非常積極)
1.3.2?KarateCub
數據集中只有一個圖,圖中的頂點描述社交網絡中的用戶是否是一家空手道俱樂部中的成員。
1.3.3?CationGraph
頂點表示作者,邊表示引用關系。
1.3.4 CORA
頂點表示作者,邊表示引用關系。
1.3.5?CORAFUll
CORA數據集的擴展,頂點表示論文,邊表示論文間的引用關系。
1.3.6?AmazonCoBuy
頂點表示商品,邊表示經常一起購買的兩種商,。頂點特征表示產品的評論,頂點的類別標簽表示產品的類別。
3.7?Coauthor
頂點表示作者,邊表示共同撰寫過論文的關系。頂點特征表示作者論文中的關鍵詞,頂點類別標簽表示作者的研究領域。
3.8?MiniGCDalaset(即mini graph classification dataset,小型圖分類數據集)
包含8種不同類型的圖形,包括循環圖、星形圖、車輪圖、棒棒糖圖、超立方體圖、網格圖、集團圖和圓形梯形圖。
3.9?TUDataset
圖形分類中的圖形內核數據集。
3.10?GINDataset(即graphLsomorphism network dataset,圖同構網絡數據集)
圖內核數據集的緊湊子集。數據集包含流行的圖形內核數據集的緊湊格式,包括4個生物信息學數據集(MUTAG、NCH、PROTEINS、PTC)和5個社交網絡數據集(COLAB、IMDBBNARY、MDBMULT、REDDITBINARY,REDDITMULT5K)。
3.11?PPIDataset(即protein-protein interaction dataset,蛋白質-蛋白質相互作用數據集)
數據集包含24個圖,每個圖的平均頂點數為2372,每個頂點具有50個要素和121個標簽。
3.12?QM7b
由7211個分子組成,所有的分子可以回歸到14個分類目標。頂點表示原子,邊表示鍵。
1.4 DGL庫中數據集的加載
在使用時,可以通過dg.data庫中的數據集類直接進行實例化。
實例化的參數要根據每個數據集類的構造函數的定義進行配置。
代碼如下:
1.4.1 數據集加載的Tip
dgldata庫中的數據集類規劃得并不是太好,有的類直接裸露在數據下面,有的類則被額外封裝了一層。
例如,CoraDataset類就被封裝在citation_graph.py文件中,載入時需要編寫如下代碼:
from dgl.data import citation-graph data = citation_graph.corapataset() 該代碼在執行時會讀取指定的數據集,并生成鄰接矩陣,然后調用NetWorkx模塊根據該鄰接矩陣生成圖以及訓練數據集、測試數據集。因此,在使用DGL的數據集時,還需要在dgl/data路徑下單獨查找,以庫中實際的代碼為準。
1.5?DGL庫中的圖(DGLGraph)
DGLGraph類封裝一個特有的圖結構,可以理解為DGL庫的核心,DGL庫中的大部分圖神經網絡是基于DGLGraph類實現的。
1.6 DGL庫中的內聯函數
DGL庫提供了大量的內聯(buit-in)函數,這些函數主要用于對邊和頂點進行運算處理,它們的效率要比普通的圖處理函數高很多。
DGL庫中的內聯函數都放在dgl.function模塊下。在使用時,要配合DGLGraph圖的消息傳播機制進行運算。
消息傳播機制屬于DGL庫的底層功能,常會在構建圖神經網絡模型中使用。
如果只使用DGL庫中封裝好的圖神經網絡模型,那么無須深入了解。
2 PYG庫
PyG庫是基于PyTorch構建的幾何深度學習擴展庫,可以利用專門的CUDA內核實現高性能。
在簡單的消息傳遞APl之后,它將大多數近期提出的卷積層和池化層捆綁成一個統一的框架,支持CPU和GPU計算,并遵循不變的數據流范式,這種范式可以隨著時間的推移動態改變圖結構。
3 NetWorkx庫
NetWorkk是一個用Python語言開發的圖論與復雜網絡建模工具,內置了常用的圖與復雜網絡分析算法,可以方便地執行分析復雜網絡數據、仿真建模等任務。
利用NetWorkx可以以標準化和非標準化數據格式存儲網絡,生成多種隨機網絡和經典網絡,分析網絡結構,建立網絡模型,設計新的網絡算法,進行網絡繪制等。
3.1?NetWorkx庫的安裝和使用
由于NetWorkx庫默認集成在Anaconda軟件中,因此,如果已經安裝了Anaconda,那么可以直接使用NetWorkx庫。
3.2 查詢NetWorkx庫的版本
import networkx print(networkx.__version__) # 2.7.13.3?NetWorkx庫支持的圖結構
3.4?NetWorkx庫中的圖數據對象
NetWorkx庫中的圖數據對象可以通過nx.generate_graphml接口轉化成graphm/文件格式的字符串。該字符串是以生成器形式存儲的,每一個子圖為生成器中的一個元素。
import networkx as nxG = nx.path_graph(4) print(list(nx.generate_graphml(G)))在該代碼執行后,會輸出graphml文件格式的圖數據對象,具體如下:
['<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">', ' ?<graph edgedefault="undirected">', ' ? ?<node id="0" />', ' ? ?<node id="1" />', ' ? ?<node id="2" />', ' ? ?<node id="3" />', ' ? ?<edge source="0" target="1" />', ' ? ?<edge source="1" target="2" />', ' ? ?<edge source="2" target="3" />', ' ?</graph>', '</graphml>']
通過graphml文件格式的描述,實現圖數據的文本形式顯示,可以通過直接修改graphml文件的內容完成對圖數據的維護,比使用接口函數的方式更直接,也更靈活。
3.4.1?graphml文件的持久化
使用nx_writegraphm接口可輸出內存中的圖對象,待編輯好之后,使用nx.read_graphml接口將文件加載到內存中。
3.4.2?graphml文件的打開方式
graphml的文件使用的是xml格式,可以用yEd Graph Edtor軟件打開
總結
以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx服务无法启动,启动时报错106
- 下一篇: [已解决]user is not in