日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PaperNotes(15)-图神经网络、PyG极简版入门笔记

發布時間:2023/12/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PaperNotes(15)-图神经网络、PyG极简版入门笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖神經網絡概況

  • 1.GNN,GCN,GE的區別
  • 2.圖卷積的通式--矩陣該如何作用
    • 2.1實現1
    • 2.2實現2
    • 2.3實現3
  • 3.PyTorch geometric
    • 3.1 PyG內置數據集
      • 3.1.1ENZYMES dataset
      • 3.1.2Cora
    • 3.2 PyG自定義數據集
      • 3.2.1Data構建簡單的圖結構
      • 3.2.2 Dataset
      • 3.2.3 InMemoryDataset

一文讀懂圖卷積GCN(https://zhuanlan.zhihu.com/p/89503068)讀書筆記
本文更強調的是空域卷積,比較簡單的介紹。

1.GNN,GCN,GE的區別

Graph Embedding:表示學習的范疇,將圖中節點/將整個圖表示為低維、實值、稠密的向量。(可以將用戶表示成向量的形式,再勇于節點分類任務)圖嵌入的方式有三種:矩陣分解,deepWalk, 圖神經網絡

Graph Neural Netvork:神經網絡在圖上應用的模型統稱。依據傳播的方式不同,可以分為圖卷積神經網絡,圖注意力網絡,圖LSTM。(本質還是將網絡結構技巧借鑒過來做新的嘗試)。

Graph Convolutional Network:采用卷積操作圖神經網絡,是最經典的圖神經網絡。引發了無數的改進工作。

一句話概括三者的關系:GCN是一類GNN,GNN可以實現GE。

現實需求:現實中,像圖像一樣排列整齊的數據只占很小的一部分,還有更大的一部分數據以圖的形式存儲(社交網絡的信息,知識圖譜,蛋白質網絡,萬維度網)
提出疑問:能夠類似于圖像領域的卷積操作一樣,具有一個通用的范式來抽取圖像特征呢?–圖卷積(處理非結構化數據的利器)

2.圖卷積的通式–矩陣該如何作用

圖的表示:
G=(V,E)G=(V,E)G=(V,E),其中VVV為節點的集合,EEE為邊的集合。對于每個節點i,均有特征向量xix_ixi?,可以用矩陣XN?DX_{N*D}XN?D?表示。
圖相關矩陣:(Laplacian矩陣的定義是否有具體含義?)
度矩陣D-對角陣,對角線元素為各個結點的度,無向圖:與該頂點相關聯的邊數;有向圖:入度和出度
鄰接矩陣A:表示結點間關系,無向圖:對稱矩陣,有邊即為1;有向圖:有向連接才為1。
Laplacian 矩陣L:L=D-A

圖卷積核心思想:每個節點受到鄰居節點的影響,通式:
Hl+1=f(Hl,A)H^{l+1}=f(H^l,A)Hl+1=f(Hl,A)

其中:H0=XH^0=XH0=X為圖的特征矩陣,fff的差異定義了不同算法的差異。

2.1實現1

Hl+1=σ(AHlWl)H^{l+1}=\sigma(AH^lW^l)Hl+1=σ(AHlWl)

出發點:結點特征與鄰居結點的特征有關,鄰居結點各個維度特征的加權和。多層疊加后能夠利用多層鄰居的信息。

存在的問題:沒有考慮結點對自身的影響;A沒有被規范化時,鄰居結點多的結點擁有更大的影響力。

2.2實現2

Hl+1=σ(LHlWl)H^{l+1} = \sigma(LH^lW^l)Hl+1=σ(LHlWl)
使用Laplacian 矩陣(Combinatorial Laplacian?),對角線未知非零;解決了沒有考慮自身結點信息自傳遞的問題。

2.3實現3

利用Symmetric normalized Laplacian同時解決兩個問題:自傳遞和歸一化的問題。

歸一化的Laplacian矩陣具有多種形式,這些矩陣其實就是對應的圖卷積核。

3.PyTorch geometric

PyTorch geometric–基于PyTorch的用于處理不規則數據(圖)的庫,能夠用于快速實現圖等數據的表征學習的框架。
PyG-document

對機器學習庫最關心的內容:數據規范,模型定義,參數學習,模型測試

3.1 PyG內置數據集

PyTorch Geometric 包含了很多常見的基本數據集,例如:Cora, Citeseer, Pubmed

3.1.1ENZYMES dataset

graph-level數據集載入demo–ENZYMES dataset, 包含6大類,一共60個圖,能夠用于graph-level的分類任務。

from torch_geometric.datasets import TUDataset # graph_level demo dataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES') # 會下載,不過很快就下載完了 print("數據集的大小(有多少張圖):", len(dataset)) print("圖的類別數:", dataset.num_classes) print("圖中結點的特征數:", dataset.num_node_features)print("第i張圖:", dataset[2]) print("圖為有向圖否:", dataset[2].is_undirected())

輸出

數據集的大小(有多少張圖)600 圖的類別數: 6 圖中結點的特征數: 3 第i張圖: Data(edge_index=[2, 92], x=[25, 3], y=[1]) 圖為有向圖否: True

3.1.2Cora

node-level 數據集載入demo–Cora,依據科學論文之間相互引用關系而構建的Graph數據集,一共包括2708篇論文,共7類:Genetic_Algorithms,Neural_Networks,Probabilistic_Methods,Reinforcement_Learning,Rule_Learning,Theory

# node_level demofrom torch_geometric.datasets import Planetoiddataset2 = Planetoid(root='/tmp/Cora', name='Cora') # 自動下載稍微有慢 # 直接上數據倉庫中下載數據后放入/tmp/Cora/raw 文件夾著中 # cp ~/Downloads/planetoid-master/data/*cora* ./raw # 處理完后會多一個processed 文件夾print("數據集的大小(有多少張圖):", len(dataset2)) print("圖的類別數:", dataset2.num_classes) print("圖中結點的特征數:", dataset2.num_node_features)print("第i張圖:", dataset2[0]) print("圖為有向圖否:", dataset2[0].is_undirected())print("訓練結點數:", dataset2[0].train_mask.sum().item()) print("測試結點數:", dataset2[0].test_mask.sum().item()) print("驗證結點數:", dataset2[0].val_mask.sum().item())

輸出

數據集的大小(有多少張圖)1 圖的類別數: 7 圖中結點的特征數: 1433 第i張圖: Data(edge_index=[2, 10556], test_mask=[2708], train_mask=[2708], val_mask=[2708], x=[2708, 1433], y=[2708]) 圖為有向圖否: True 訓練結點數: 140 測試結點數: 1000 驗證結點數: 500

3.2 PyG自定義數據集

3.2.1Data構建簡單的圖結構

利用torch_geometric.data.Data()建模下圖:四個結點v0,v1,v2,v3v_0,v_1,v_2,v_3v0?,v1?,v2?,v3?,每個結點帶有特征向量[2,1],[5,6],[3,7],[12,0][2,1],[5,6],[3,7],[12,0][2,1],[5,6],[3,7],[12,0],并且每個結點的目標值/目標類別分別為:0,1,010,1,010,1,01

Data()的參數屬性:

Data(x=None, edge_index=None, edge_attr=None, y=None, pos=None, normal=None, face=None, **kwargs) # 參數 # x (Tensor, optional) – 結點的特征矩陣:[num_nodes, num_node_features]. (default: None) # edge_index (LongTensor, optional) – 結點的連接關系,以COO格式存儲 [2, num_edges]. 第一維度為源結點,第二維為目標結點,邊可無序存儲,可用于計算鄰接矩陣。無向圖會有2*num_nodes條邊。 # y (Tensor, optional) – 圖或者結點的目標向量,可以為任意的尺寸. (default: None) # edge_attr (Tensor, optional) – 邊的特征矩陣 [num_edges, num_edge_features]. (default: None) # pos (Tensor, optional) – Node position matrix with shape [num_nodes, num_dimensions]. (default: None) # normal (Tensor, optional) – Normal vector matrix with shape [num_nodes, num_dimensions]. (default: None) # face (LongTensor, optional) – Face adjacency matrix with shape [3, num_faces]. (default: None)

建模代碼demo:

import torch from torch_geometric.data import Data x = torch.tensor([[2, 1], [5, 6], [3, 7], [12, 0]], dtype=torch.float) # 每個結點的特征向量 y = torch.tensor([0, 1, 0, 1], dtype=torch.float) # 結點的目標值 edge_index = torch.tensor([[0, 1, 2, 0, 3], [1, 0, 1, 3, 2]], dtype=torch.long) data = Data(x=x, y=y, edge_index=edge_index) print(data)

輸出:

Data(edge_index=[2, 5], x=[4, 2], y=[4]) # 方括號中為各個矩陣的尺寸,其中包括5條邊,4個維度為2的特征向量,和4個標亮目標值。

3.2.2 Dataset

Dataset,適用于較大的數據集

torch_geometric.data.Dataset

3.2.3 InMemoryDataset

InMemoryDataset,適用于RAM的數據

torch_geometric.data.InMemoryDataset # 繼承自torch_geometric.data.Dataset

目前關注的還不是創建自己的數據集合,回頭再來

PyTorch geometric官方文檔,安裝啦,簡單使用啦:https://pytorch-geometric.readthedocs.io/en/latest/notes/introduction.html
使用參考博文1–圖神經網絡庫PyTorch geometric(PYG)零基礎上手教程:https://zhuanlan.zhihu.com/p/91229616
使用參考博文2–圖神經網絡之神器——PyTorch Geometric 上手 & 實戰:https://zhuanlan.zhihu.com/p/94491664

總結

以上是生活随笔為你收集整理的PaperNotes(15)-图神经网络、PyG极简版入门笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。