實戰|在PyTorch框架下使用PyG和networkx對Graph進行可視化

2021-03-02 深度學習與圖網絡

簡介:本文介紹如何將Pytorch Geometric運行過程中得到的data或者tensor轉換成networkx可以處理的格式,進行可視化。

其中Pytorch geometric的地址為:https://pytorch-geometric.readthedocs.io/en/latest/

方法一

根據networkx的文檔:https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.drawing.nx_pylab.draw_networkx.html

我們可以寫出來一個非常簡單的例子,如下(代碼可以左右滑動):

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
edge_index = [(1, 2), (1, 3), (2, 3), (3, 4)]
G.add_edges_from(edge_index)
nx.draw(G)
plt.show()

運行程序之後,可以得到下面的圖,(偷了一個懶,沒有加label之類的信息)

這個例子給我們的啟發:我們可以將PyG得到的edge_index轉成numpy的格式,然後傳給nx,下面是根據這個寫的一個函數:
在PyG中,邊的表示放在了edge_index中,由一個二維的矩陣構成,edge_index[0]表示節點edge_index[1]表示另一個節點。

def draw(edge_index, name=None):
G = nx.Graph(node_size=15, font_size=8)
src = edge_index[0].cpu().numpy()
dst = edge_index[1].cpu().numpy()
edgelist = zip(src, dst)
for i, j in edgelist:
G.add_edge(i, j)
plt.figure(figsize=(20, 14))
nx.draw_networkx(G)
plt.savefig('{}.png'.format(name if name else 'path'))

註:該方法可以用於模型中的forward函數,用於分析cov,pool等操作

再寫一個與上面思想一致,可以直接運行的一個例子

from torch_geometric.datasets import KarateClub
import networkx as nx
import matplotlib.pyplot as plt
dataset = KarateClub()
edge, x, y = dataset[0]


x_np = x[1].numpy()
y_np = y[1].numpy()
g = nx.Graph()
name, edgeinfo = edge
src = edgeinfo[0].numpy()
dst = edgeinfo[1].numpy()
edgelist = zip(src, dst)
for i, j in edgelist:
g.add_edge(i, j)
nx.draw(g)
plt.savefig('test.png')
plt.show()

方法二

其實,torch_geometric.utils中已經帶有to_networkx的函數可以直接將格式為torch_geometric.data.Data 的數據轉換為networkx.DiGraph的格式,該格式可以直接networkx處理,但是我們提前要得到torch_geometric.data.Data的數據格式

import networkx as nx
from torch_geometric.utils.convert import to_networkx
def draw(Data):
G = to_networkx(Data)
nx.draw(G)
plt.savefig("path.png")
plt.show()

註:這個一般可以用於在model加載數據之前數據的分析,比如下面的例子

for i, data in enumerate(train_loader):
draw(data)
data = data.to(args.device)
out = model(data)
loss = F.nll_loss(out, data.y)
print("Training loss:{}".format(loss.item()))
loss.backward()
optimizer.step()
optimizer.zero_grad()

上面的函數是在graph classification進行分析的一段代碼,可以把batch size的設置為1,那麼for循環中得到就是一個graph的數據,在把數據feed給模型之前,我們可以通過該方法分析一下原始的數據是什麼樣子的。

如果有什麼疑問加,請聯繫(同時,可以加入微信群一起學習哈~)

相關焦點

  • 社會網絡分析(一) | python的Networkx庫基礎知識
    對廣大文科生來說,雖然不需要理解圖論的全部知識,但需要了解社會網絡相關的基本概念,數據猿就以Networkx和Gephi為例,展開對社會網絡分析的探索。希望能通過對python的networkx的學習和使用,逐漸熟悉社會網絡分析在人文社科中的應用。今天先從Networkx開始,學習networkx生成圖的基本方法。
  • 7款 Python 可視化工具對比
    matplotlib 已經成為事實上的數據可視化方面最主要的庫,此外還有很多其他庫,例如vispy,bokeh, seaborn,  pyga, folium 和 networkx,這些庫有些是構建在 matplotlib 之上,還有些有其他一些功能。 本文會基於一份真實的數據,使用這些庫來對數據進行可視化。
  • 【白話機器學習】算法理論+實戰之PageRank算法
    好了,運行完這個例子之後,來看下 NetworkX 工具都有哪些常用的操作。★關於圖的創建圖可以分為無向圖和有向圖,在 NetworkX 中分別採用不同的函數進行創建。在這個函數的參數中接收的是 1 個或多個三元組[u,v,w]作為參數,u、v、w 分別代表起點、終點和權重。另外,我們可以使用 remove_edge 函數和 remove_edges_from 函數刪除指定邊和從邊集合中刪除。另外可以使用 edges() 函數訪問圖中所有的邊,使用 number_of_edges() 函數得到圖中邊的個數。」
  • PyTorch框架歷史和特性更迭與安裝過程
    PyTorch是由Facebook公司開發的深度學習框架,其起源應該是Torch這個深度學習框架。Torch深度學習框架最初的開發可以追溯到2002年。相比使用Python語言作為深度學習框架前端的PyTorch,Torch使用了Lua語言作為深度學習框架的前端。由於機器學習的主流語言是Python,相比之下,Lua語言比較小眾。
  • 專欄| 手把手教你用DGL框架進行批量圖分類
    每張圖有10-20個節點dataset = MiniGCDataset(80, 10, 20)graph, label = dataset[0]fig, ax = plt.subplots()nx.draw(graph.to_networkx(), ax=ax)ax.set_title
  • 專欄 | 手把手教你用DGL框架進行批量圖分類
    ()nx.draw(graph.to_networkx(), ax=ax)ax.set_title('Class: {:d}'.format(label))plt.show()運行以上代碼後可以畫出數據集中第一個樣本的圖結構以及它對應的標籤:
  • GraphQL 概念與測試(下):graphy測試框架
    雖然自由度很高,但還是定義了請求入口,在這裡是query下的MGetMainAccelerDomain,它的返回是AccelerDomain的數組。入口類中會用_fields來記錄它可以進行操作,以及對應的返回類型。
  • CS224w 圖神經網絡(Graph Neural Networks)
    環境準備本次課程使用的工具是PyTorch Geometric (PyG):https://github.com/rusty1s/pytorch_geometric文檔:https://pytorch-geometric.readthedocs.io/PyTorch Geometric (PyG)是一款非常好用的PyTorch
  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    01為什麼使用PyQtGraph庫我們知道,在Python中,已經有了很多可供選擇的數據可視化庫。但是這些繪圖庫也存在著不足,即在圖形繪製速度上有所欠缺,特別是對於科研算法方面的數據可視化,很多情況需要實時繪圖,要求能夠提供儘可能快的繪製刷新速度,那這些庫顯的有些力不從心了。而我們下面要介紹的繪圖庫-PyQtGraph庫,則在繪圖速度方面表現尤其突出,在不失繪圖美觀、功能強大的前提下,在繪圖速度方面作了極大的優化,特別適合於實時數據採集的動態圖形繪製場合。
  • 比DGL快14倍:PyTorch圖神經網絡庫PyG上線了
    機器之心報導參與:路、王淑婷、李澤南graph_nets和 DGL 已經上線。但看起來這些工具還有很多可以改進的空間。在簡單的消息傳遞API之後,它將大多數近期提出的卷積層和池化層捆綁成一個統一的框架。所有的實現方法都支持 CPU 和 GPU 計算,並遵循不變的數據流範式,這種範式可以隨著時間的推移動態改變圖結構。PyG已在MIT許可證下開源,它具備完備的文檔,且提供了附帶教程和示例。
  • 【Pytorch 】筆記八:Tensorboard 可視化與 Hook 機制
    這種情況即使背過人家這個程序,那也只是某個程序而已,不能說會 Pytorch,並且這種背程序的思想本身就很可怕, 所以我還是習慣學習知識先有框架(至少先知道有啥東西)然後再通過實戰(各個東西具體咋用)來填充這個框架。而「這個系列的目的就是在腦海中先建一個 Pytorch 的基本框架出來,學習知識,知其然,知其所以然才更有意思 ;)」。
  • PyTorch 1.0 正式版發布了!
    GitHub 地址:https://github.com/pytorch/pytorch/releases/tag/v1.0.0PyTorch 1.0 同時面向產品化 AI 和突破性研究的發展現在,研究人員及工程師可以輕鬆利用這一開源深度學習框架的新功能,包括可在 eager execution 和 graph execution 模式之間無縫轉換的混合前端、改進的分布式訓練、用於高性能研究的純 C++ 前端,以及與雲平臺的深度集成。
  • Python中使用pyqtgraph庫實現數據可視化之逐點刷新波形圖
    繪圖庫,相對於matplotlib庫,由於內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢另外,它不僅為各種數據提供了快速可交互式的圖形顯示,同時也提供了用於快速開發應用程式的各種小工具,如屬性樹、流程圖等小部件,在數學、科學和工程領域都有著廣泛的應用。
  • HugeGraph發布可視化平臺Hubble首個版本
    該版本全面升級平臺可視化工具,打造一站式圖服務,從數據建模,到數據快速導入,再到數據的在線、離線分析,以及圖的統一管理,實現了圖應用全流程的嚮導式操作,旨在提升社區用戶的使用順暢度,降低使用門檻,提供更為高效易用的使用體驗。
  • Pytorch框架安裝方法(基於Anaconda環境和Pycharm IDE)
    本文介紹基於Anaconda環境以及PyCharm軟體結合,安裝PyTorch深度學習框架。1.6 單擊啟動Anaconda Prompt 創建虛擬「房間」通過conda創建一個名為:pytorch的虛擬「房間」,可以方便未來對不同版本的PyTorch進行管理,具體方法如下:conda create -n pytorch python=3.6
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    PyTorch 開發者則使用 Visdom,但是 Visdom 提供的功能很簡單且有限,所以 TensorBoard 在訓練過程可視化方面更好。TensorBoard 的特性:跟蹤和可視化損失和準確度等指標可視化計算圖(操作和層)查看權重、偏差或其它張量隨時間變化的直方圖展示圖像、文本和音頻數據分析 TensorFlow 程序在 TensorBoard 中可視化訓練Visdom 的特性
  • Pytorch 網絡結構可視化
    > 作者:田海山https://zhuanlan.zhihu.com/p/66320870安裝可以通過以下的命令進行安裝
  • PYTORCH與TENSORFLOW:哪種框架最適合您的深度學習項目?
    為了幫助開發這些架構,諸如Google,Facebook和Uber之類的技術巨頭已經發布了適用於Python深度學習環境的各種框架,從而使學習,構建和訓練多樣化的神經網絡變得更加容易。在本文中,我們將研究兩個流行的框架並進行比較:PyTorch與TensorFlow。簡要地比較一下,最常用和依賴的Python框架TensorFlow和PyTorch。
  • 如何使用 TensorFlow mobile 將 PyTorch 和 Keras 模型部署到行動裝置
    安裝本教程會用到 PyTorch 和 Keras 兩個框架-遵循下列指導安裝你想使用的機器學習框架。安裝哪個由你選擇。首先,安裝 TensorFlow:如果你是 PyTorch 的開發者,確保你安裝的是 PyTorch 的最新版本。
  • Deep CARs:使用Pytorch學習框架實現遷移學習
    構建和訓練模型3. 用不可視數據測試模型導入庫這一步只是加載庫,確保GPU是打開的。由於將使用深層網絡的預訓練模型,所以對CPU進行訓練並不是個好的選擇,原因是需要它花費很長的時間。GPU與此同時執行線性代數計算,訓練速度會提高100倍。