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}XND表示。
图相关矩阵:(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.mzph.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.简单来说-关联规则 关联规则–通过量化的数字描述物品甲的出现 对 物品乙的出现 有多大影响。 最早是为了发现超市销售数据库中不同的商品之间的关联关系:哪组商品可能会在一次购物中同时购买。 广泛…