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

2023-12-30 03:08

本文主要是介绍ML(10)-图神经网络、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),其中 V V V为节点的集合, E E E为边的集合。对于每个节点i,均有特征向量 x i x_i xi,可以用矩阵 X N ∗ D X_{N*D} XND表示。
图相关矩阵:(Laplacian矩阵的定义是否有具体含义?)
度矩阵D-对角阵,对角线元素为各个结点的度,无向图:与该顶点相关联的边数;有向图:入度和出度
邻接矩阵A:表示结点间关系,无向图:对称矩阵,有边即为1;有向图:有向连接才为1。
Laplacian 矩阵L:L=D-A

图卷积核心思想:每个节点受到邻居节点的影响,通式:
H l + 1 = f ( H l , A ) H^{l+1}=f(H^l,A) Hl+1=f(Hl,A)

其中: H 0 = X H^0=X H0=X为图的特征矩阵, f f f的差异定义了不同算法的差异。

2.1实现1

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

出发点:结点特征与邻居结点的特征有关,邻居结点各个维度特征的加权和。多层叠加后能够利用多层邻居的信息。

存在的问题:没有考虑结点对自身的影响;A没有被规范化时,邻居结点多的结点拥有更大的影响力。

2.2实现2

H l + 1 = σ ( L H l W l ) 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()建模下图:四个结点 v 0 , v 1 , v 2 , v 3 v_0,v_1,v_2,v_3 v0,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 , 01 0,1,01 0,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

这篇关于ML(10)-图神经网络、PyG极简版入门笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551516

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear