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