【邁向圖神經網絡GNN】Part2: 使用PyTorch構建圖形結構的全過程

更新於 發佈於 閱讀時間約 7 分鐘
上篇我們基本認識圖神經的起源發展,以及可行的應用場景
那這篇主要筆記使用 pytorch 建立 graph 的幾個概念與實作!

參考的資源: https://youtu.be/Obbr5TdD3Bo

如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧!

【邁向圖神經網絡GNN】Part1: 圖數據的基本元素與應用


raw-image

為何需要GNN?

為了進一步理解圖神經網絡(GNN)的重要性,讓我們先回顧一下為何需要GNN。在傳統的神經網絡模型中,當我們輸入 Xa,模型會輸出 yA;同樣地,輸入 Xb​ 會得到 yB​。這樣的處理方式假設 Xa 與 Xb 之間沒有直接的相互關係,因此可以將它們視為獨立的實體。

然而,在許多真實世界的應用中,數據點之間往往是互相連接和影響的。例如,在社交網絡、化學分子或語言模型中,元素之間的關係是資料的核心部分。使用GNN,我們不僅處理單獨的數據點Xa​ 或 Xb​,而是處理一個包含多個數據點和它們之間連結的特徵。

GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。這使得GNN能夠產生更加精確和有意義的輸出,其中每個輸出不僅反映了單個節點的特性,也反映了節點之間的相互作用。

Graph組成的元素包含:Node、Edge、Node feature、Edge feature、label

引用: https://www.youtube.com/watch?v=Obbr5TdD3Bo

引用: https://www.youtube.com/watch?v=Obbr5TdD3Bo

  1. node: 節點,上圖中的 0 , 1 , 2 , 3 都屬於節點
  2. edge: 關係或稱線,兩個節點之間的連結就是關係,例如節點0與節點1之間有一條連線,就是 edge 
  3. node feature: 節點的特徵,例如節點 0 上有兩個特徵 x0 和 x1 
  4. edge feature : 線的特徵,例如節點 0 和節點 1 的連線上的特徵 attr = 1
  5. label : 標註資料,可以定義在 node 上,例如節點 0 的 label 是 1 

使用 pytorch 實作簡單的 graph

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)
  • 第一個部分表達共有4個 node ,其 node feature 分別是 (6,4) (0,1)…
  • 第二個部分紀錄哪些 edge 相連,node 之間的連結可以有方向性,那我們這裡假設是屬於雙向連結,陣列直的看,表達 node 0 和 node 1 有連結,再來會重複一次,接著是 node 0 和 node 2 有連結
  • 第三部分是 edge 上的 feature ,同上也會重複一次,並且對應 edge 的陣列,表達 node 0 和 node 1 之間的連線上的 feature 為 1 
  • 第四部分是 label ,對應 node 的順序,依序表達 node 0 ~ node 4 

那把這個 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 能夠包含哪些元素。此外,我們還實現了圖的基礎視覺化展示。當手頭的數據具有這種互聯關係時,我們可以使用這種方法將數據轉換成圖形結構。這不僅包括原始數據的特徵,還能創造出基於連結的新特徵,幫助接下來模型預測提高精準度

方格子 vocus

raw-image
留言
avatar-img
留言分享你的想法!
avatar-img
Karen的沙龍
35會員
50內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
Karen的沙龍的其他內容
2024/11/16
本研究探討如何透過圖形資料庫模型來構建電子商務顧客的360度全景視圖,並使用客戶行為模型圖(CBMG)有效整合和分析客戶數據。研究強調理解顧客的行為模式和需求,並針對三種典型的購物行為類型進行分析,以提升網站設計和用戶體驗。通過Neo4j的應用,提供了可視化客戶行為模式的視角。
Thumbnail
2024/11/16
本研究探討如何透過圖形資料庫模型來構建電子商務顧客的360度全景視圖,並使用客戶行為模型圖(CBMG)有效整合和分析客戶數據。研究強調理解顧客的行為模式和需求,並針對三種典型的購物行為類型進行分析,以提升網站設計和用戶體驗。通過Neo4j的應用,提供了可視化客戶行為模式的視角。
Thumbnail
2024/07/28
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
2024/07/28
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
2024/07/24
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
2024/07/24
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
延續上一篇訓練GAM模型,這次我們讓神經網路更多層更複雜一點,來看訓練生成的圖片是否效果會更好。 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 資料集分割處理的部分在延續上篇文章,從第五點開始後修改即可,前面都一樣 訓練過程,比較圖 是不是CNN的效果比MLP還要好,
Thumbnail
延續上一篇訓練GAM模型,這次我們讓神經網路更多層更複雜一點,來看訓練生成的圖片是否效果會更好。 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 資料集分割處理的部分在延續上篇文章,從第五點開始後修改即可,前面都一樣 訓練過程,比較圖 是不是CNN的效果比MLP還要好,
Thumbnail
本文主要介紹,如何利用GAN生成對抗網路來訓練生成圖片。 利用tensorflow,中的keras來建立生成器及鑑別器互相競爭訓練,最後利用訓練好的生成器來生成圖片。 GAN生成對抗網路的介紹 它由生成網路(Generator Network)和鑑別網路(Discriminator Netwo
Thumbnail
本文主要介紹,如何利用GAN生成對抗網路來訓練生成圖片。 利用tensorflow,中的keras來建立生成器及鑑別器互相競爭訓練,最後利用訓練好的生成器來生成圖片。 GAN生成對抗網路的介紹 它由生成網路(Generator Network)和鑑別網路(Discriminator Netwo
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
Thumbnail
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
Thumbnail
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
Thumbnail
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News