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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444754.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode76 最小覆蓋子串

給你一個字符串 S、一個字符串 T,請在字符串 S 里面找出:包含 T 所有字母的最小子串。 示例: 輸入: S "ADOBECODEBANC", T "ABC" 輸出: "BANC" 說明: 如果 S 中不存這樣的子串,則返…

Unity的匹配系統

這個匹配系統是指一個玩家,可以創建一個自己隨意命名的房間,然后其他玩家可以通過聯網去搜索房間,然后加入房間一起游戲 我先講講怎么使用這個匹配系統: 在運行游戲后,因為添加了Network Manager HUD組件,所…

PaperNotes(16)-圖神經網絡GNN簡史、不動點建模-筆記

圖神經網絡簡史、簡介1.圖神經網絡簡史2.圖神經網絡--學習過程3.圖神經網絡--理論基礎4.圖神經網絡的局限5.GNN,RNN,GGNN6.小結閱讀筆記:從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡模型 (一)(https://www.cnblogs.com/SivilTaram/p/graph_n…

Matchmaker

Unity的多玩家網絡功能包含了玩家在因特網上互相玩而不需要公共IP地址的服務。用戶可以創建游戲,獲取活動游戲列表;加入并退出游戲。當在internet上玩時,網絡流量將通過云中的Unity,而不是直接在客戶端之間進行。這就避免了防火墻和NATs的問題,幾乎可以在任何地方玩游戲。 …

PaperNotes(17)-圖卷積神經網絡GCN-筆記

圖卷積神經網絡GCN-筆記1.卷積是什么2.圖卷積的源起3.空域卷積3.1消息傳遞網絡MPNN3.2 圖采樣與聚合GraphSage4.頻域卷積5.圖結構的序列化-Patch-SAN從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡模型 (二)(https://www.cnblogs.com/SivilTaram/p/graph_n…

Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 標簽

摘錄某個工程的 web.xml 文件片段:訪問順序為1—>2—>3—>4,其中2和3的值必須相同。 url-pattern 標簽中的值是要在瀏覽器地址欄中輸入的 url,可以自己命名,這個 url 訪問名為 servlet-name 中值的 servlet,兩…

leetcode236 二叉樹的最近公共祖先

給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的…

Unity的 UNet組件介紹

UNet常見概念簡介 Spawn:簡單來說,把服務器上的GameObject,根據上面的NetworkIdentity組件找到對應監視連接,在監視連接里生成相應的GameObject.Command:客戶端調用,服務器執行,這樣客戶端調用的參數必需要UNet可以序列化,這樣服務器在執行時才能把參數反序列化。需要注意…

MachineLearning(10)-聚類

聚類1.K-mean2.系統聚類3.DBSCAN聚類算法聚類:無監督學習,將相似的樣本聚為一類。核心如何定義相似。分類:有監督學習,依據分類準則,將樣本劃分為不同的類。核心分類器的設計(KNN)聚類&#xff…

幀同步和狀態同步(一)

幀同步 什么是幀同步:幀同步常被RTS(即時戰略)游戲常采用。在游戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到服務器, 服務器收到后并不計算游戲行為, 而是轉發到所有客戶端。這里最重要的…

幀同步和狀態同步(二)案例分析

轉自:http://www.gameres.com/489361.html 騰訊一下出了兩款MOBA游戲,全民超神,王者榮耀,玩了一下,效果不錯,就分析了一下它底層的一些技術,發現一個是采用的狀態同步,TCP協議&#…

leetcode279 完全平方數

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。 示例 1: 輸入: n 12 輸出: 3 解釋: 12 4 4 4. 示例 2: 輸入: n 13 輸出: 2 解釋: 13 4 9. 思路&#xf…

推薦系統(1)-概述

推薦系統概述1.數據部分2.模型部分2.1模型的組成2.2模型的訓練2.3模型評估《深度學習/推薦系統》讀書筆記推薦系統要處理的問題:對于用戶U(user),在特定的場景C(context),針對海量的“物品信息”,構建一個模型f(U,I,C)f(U,I,C)f(U…

(十七)深入淺出TCPIP之UDP打洞原理

專欄其他文章: 理論篇: (一)深入淺出TCPIP之理解TCP報文格式和交互流程 (二)深入淺出TCPIP之再識TCP,理解TCP三次握手(上) (三)深入淺出TCPIP之再識TCP,理解TCP四次揮手(上) (四)深入淺出TCPIP之TCP三次握手和四次揮手(下)的抓包分析 (五)深入淺出TCPIP之TCP流…

leetcode240. 搜索二維矩陣 II

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target。該矩陣具有以下特性: 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例: 現有矩陣 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6…

NAT原理

網絡地址轉換(NAT,Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術。下面介紹兩類不同方式實現的NAT:NAT(Network Address Translators):稱為基本的NAT在客戶機…

推薦系統(2)-協同過濾1-UserCF、ItemCF

協同過濾1.CF概述2.數據表示3.衡量相似度4.共現矩陣5.UserCF6.ItemCF7.UserCF 與ItemCF 應用場景、主要缺陷8.基于UserCF 電影推薦demo《深度學習/推薦系統》讀書筆記推薦系統的發展一日千里 傳統的推薦模型(2010年前后):協同過濾、羅輯回歸、因子分解、梯度提升樹 …

sql查詢實例1(學生表_課程表_成績表_教師表)

表架構 Student(S#,Sname,Sage,Ssex) 學生表 Course(C#,Cname,T#) 課程表 SC(S#,C#,score) 成績表 Teacher(T#,Tname) 教師表 建表語句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8) ) CREATE TABLE course ( c# INT, cname…

android 存儲方式以及路徑簡介

存儲分成了內部存儲和外部存儲。注意內部存儲又叫做機身內存,而且內存又包含了兩個部分RAM(運行時內存,這個和運行速度有關系,是手機運行時存儲數據和指令的地方)、ROM(這個才算是真正存儲東西的內部存儲范圍,是應用配置和其他數據的地方);而外部存儲就很明確了,用戶的外部掛…

MachineLearning(11)-關聯規則分析

關聯規則分析1.簡單來說-關聯規則2.經典關聯規則挖掘-Apriori1.簡單來說-關聯規則 關聯規則–通過量化的數字描述物品甲的出現 對 物品乙的出現 有多大影響。 最早是為了發現超市銷售數據庫中不同的商品之間的關聯關系:哪組商品可能會在一次購物中同時購買。 廣泛…