上篇我們基本認識圖神經的起源發展,以及可行的應用場景
那這篇主要筆記使用 pytorch 建立 graph 的幾個概念與實作!
參考的資源: https://youtu.be/Obbr5TdD3Bo
如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧!
【邁向圖神經網絡GNN】Part1: 圖數據的基本元素與應用
為了進一步理解圖神經網絡(GNN)的重要性,讓我們先回顧一下為何需要GNN。在傳統的神經網絡模型中,當我們輸入 Xa,模型會輸出 yA;同樣地,輸入 Xb 會得到 yB。這樣的處理方式假設 Xa 與 Xb 之間沒有直接的相互關係,因此可以將它們視為獨立的實體。
然而,在許多真實世界的應用中,數據點之間往往是互相連接和影響的。例如,在社交網絡、化學分子或語言模型中,元素之間的關係是資料的核心部分。使用GNN,我們不僅處理單獨的數據點Xa 或 Xb,而是處理一個包含多個數據點和它們之間連結的特徵。
GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。這使得GNN能夠產生更加精確和有意義的輸出,其中每個輸出不僅反映了單個節點的特性,也反映了節點之間的相互作用。
1. 首先安裝 package
# Install required packages.
import os
import torch
os.environ['TORCH'] = torch.__version__
print(torch.__version__)
!pip install -q torch-scatter -f https://data.pyg.org/whl/torch-${TORCH}.html!pip install -q torch-sparse -f https://data.pyg.org/whl/torch-${TORCH}.html!pip install -q git+https://github.com/pyg-team/pytorch_geometric.git
2. import 相關套件
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch_geometric
from torch_geometric.nn import MessagePassing
from torch_geometric.utils import to_networkx
import networkx as nx
from torch_geometric.data import Data
import matplotlib.pyplot as plt
3. define graph
依照上述的五個元素: node、edge、node feature、edge feature、label 去建立~
x = torch.tensor(
[[6, 4],
[0, 1],
[5, 3],
[1, 2]])
edge_index = torch.tensor(
[[0, 1, 0, 2, 1, 2, 2, 3],
[1, 0, 2, 0, 2, 1, 3, 2]])
edge_attr = torch.tensor(
[[1],
[1],
[4],
[4],
[2],
[2],
[5],
[5]])
y = torch.tensor(
[[1],
[0],
[1],
[0]]
)
graph = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y)
print(graph)
那把這個 object 建立起來會輸出
Data(x=[4, 2], edge_index=[2, 8], edge_attr=[8, 1], y=[4, 1])
那如果想再多加一個節點的話,可以這樣做:
# Define graph components
x = torch.tensor(
[[6, 4],
[0, 1],
[5, 3],
[9, 9],
[1, 2]]
)
edge_index = torch.tensor(
[[0, 1, 0, 2, 1, 2, 2, 3,3,4],
[1, 0, 2, 0, 2, 1, 3, 2,4,3]]
)
edge_attr = torch.tensor(
[[1],
[1],
[4],
[4],
[2],
[2],
[5],
[5],
[5],
[5]]
)
y = torch.tensor(
[[1],
[0],
[1],
[0],
[0]]
)
graph = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y)
print(graph)
4. 視覺化呈現 visualize graph
(圖片在最下方,方格子好像卡住不能在這插入圖片)
四個點,四個邊的影像,然後雙向連結
到目前為止,我們已經利用 PyTorch 成功建立了圖(graph)結構,並且理解 graph object 能夠包含哪些元素。此外,我們還實現了圖的基礎視覺化展示。當手頭的數據具有這種互聯關係時,我們可以使用這種方法將數據轉換成圖形結構。這不僅包括原始數據的特徵,還能創造出基於連結的新特徵,幫助接下來模型預測提高精準度