葡萄书--图卷积网络

现有图神经网络皆基于邻居聚合的框架,即为每个目标节点通过聚合其邻居刻画结构信息,进而学习目标节点的表示

  • 谱域方法:利用图上卷积定理从谱域定义图卷积。
  • 空间域方法:从节点域出发,通过在节点层面定义聚合函数来聚合每个中心节点和其邻近节点。

谱域图卷积神经网络

谱图理论和图卷积

卷积的傅里叶变换

卷积定理:信号卷积的傅立叶变换等价于信号傅立叶变换的乘积

其中的 f,g 表示两个原始信号,F(f) 表示 f 的傅立叶变换, ⋅ 表示乘积算子, ∗ 表示卷积算子

对上面的公式做傅立叶逆变换,可以得到

利用卷积定理,我们可以对谱空间的信号做乘法,再利用傅里叶逆变换将信号转换到原空间来实现图卷积,从而避免了图数据不满足平移不变性而造成的卷积定义困难问题

图傅里叶变换

图傅立叶变换依赖于图上的拉普拉斯矩阵 L。对 L 做谱分解,我们可以得到

其中 Λ 是特征值矩阵, U 是对应的特征向量矩阵。如下图所示

图上傅立叶变换的定义依赖于拉普拉斯矩阵的特征向量。以特征向量作为谱空间下的一组基底,图上信号 x 的傅立叶变换为: 

其中 x 指信号在节点域的原始表示。x^ 指信号 x 变换到谱域后的表示

图卷积

先将图进行傅里叶变化,在谱域完成卷积操作,然后再将频域信号转换回原域。我们将卷积核定义为 gθ​(Λ),那么卷积的频域表示可以写为

先对输入 x (其输出为 y) 进行傅里叶变换得到 UTx (以及 UTy),然后对其应用卷积核得到

最后,再利用傅里叶逆变换得到

以上就是最重要的图卷积操作。它一般可以被简化为

谱卷积神经网络

该方法完全按照上述得到的卷积操作,堆叠多层得到。我们可以将上面公式的 x 和 y 替换为图上的节点特征 H(l) 和 H(l+1),那么第 l 层的结构如下 

σ 表示非线性激活函数。

切比雪夫网络

谱卷积神经网络其缺点为:

(1)难以从卷积形式中保证节点的信息更新由其邻居节点贡献,因此无法保证局部性

(2)谱卷积神经网络的计算复杂度比较大,难以扩展到大型图网络结构中

切比雪夫网络对卷积核 gθ​ 进行参数化

其中 θk​ 是需要学的系数,并定义切比雪夫多项式是可以通过递归求解,递归表达式为

其中初始值 T0​(x)=1,T1​(x)=x

切比雪夫网络第 l 层的结构定义如下:

当且仅当两个节点满足 K 跳可达时,其拉普拉斯矩阵中这一项不为 0,这一性质使得当 K 较小时,切比雪夫网络具有局部性

图卷积神经网络

图卷积神经网络(GCN)对切比雪夫网络进行了简化,只取 0 阶和 1 阶,形式如下

令 θ=θ0​=−θ1,然后应用一个重新标准化的trick,在应用于图神经网络的第 l 层时

图卷积神经网络代码

# 获得图的一些统计特征
print(f'Number of nodes: {data.num_nodes}')
print(f'Number of edges: {data.num_edges}')
print(f'Average node degree: {data.num_edges / data.num_nodes:.2f}')
print(f'Has isolated nodes: {data.has_isolated_nodes()}')
print(f'Has self-loops: {data.has_self_loops()}')
print(f'Is undirected: {data.is_undirected()}')
  • Number of nodes: 图中节点的数量。
  • Number of edges: 图中边的数量。
  • Average node degree: 平均节点度,即每个节点连接的平均边数。
  • Has isolated nodes: 是否存在孤立节点,即没有与其他节点连接的节点。
  • Has self-loops: 是否存在自环,即节点与自身相连的边。
  • Is undirected: 图是否是无向图,即边没有方向性。
from torch_geometric.loader import DataLoadertrain_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

批处理对于图数据比较复杂和麻烦。PyTorch Geometric 选择了一种和常见图像数据集不同的方法来实现多个示例的并行化。 在这里,邻接矩阵以对角方式堆叠(创建一个包含多个孤立子图的巨型图),并且节点和目标特征在节点维度中简单地连接——[num_nodes_total, num_node_features + num_target_features]

与其他批处理程序相比,该程序具有一些关键优势:(1)依赖于消息传递方案的 GNN 算子不需要修改,因为属于不同图的两个节点之间不会交换消息;(2)由于邻接矩阵以稀疏方式保存,仅保存非零条目(即边),因此不存在计算或内存开销

训练 GNN 进行图分类通常遵循一个简单的方法:

  • 通过执行多轮消息传递来嵌入每个节点。
  • 将节点嵌入聚合为统一的图嵌入(读出层)。
  • 在图嵌入上训练最终分类器。

最常见的一种读出层是简单地取节点嵌入的平均值:

PyTorch Geometric 通过 torch_geometric.nn.global_mean_pool 提供此功能,它接受小批量中所有节点的节点嵌入和分配向量批量,以计算批量中每个图的大小为 [batch_size, hide_channels] 的图嵌入

from torch.nn import Linear
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.nn import global_mean_poolclass GCN(torch.nn.Module):def __init__(self, hidden_channels):super(GCN, self).__init__()torch.manual_seed(12345)# 使用 GCNConv # 为了让模型更稳定我们也可以使用带有跳跃链接的 GraphConv# from torch_geometric.nn import GraphConvself.conv1 = GCNConv(dataset.num_node_features, hidden_channels)self.conv2 = GCNConv(hidden_channels, hidden_channels)self.conv3 = GCNConv(hidden_channels, hidden_channels)self.lin = Linear(hidden_channels, dataset.num_classes)def forward(self, x, edge_index, batch):# 1. 获得节点的嵌入x = self.conv1(x, edge_index)x = x.relu()x = self.conv2(x, edge_index)x = x.relu()x = self.conv3(x, edge_index)# 2. 读出层x = global_mean_pool(x, batch)  # [batch_size, hidden_channels]# 3. 应用最后的分类器x = F.dropout(x, p=0.5, training=self.training)x = self.lin(x)return xmodel = GCN(hidden_channels=64)
print(model)

空间域图卷积神经网络

pass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何把PDF转成word文件?三个好用的方法推荐给你

PDF转Word的问题,一直是许多人在处理文档时经常遇到的挑战。PDF作为一种广泛使用的文件格式,具有许多优点,如保持文档的原始布局、防止内容被轻易修改等。然而,这也意味着PDF文件在某些情况下不易编辑,特别是当需要对其…

Linux系统一键安装DataEase结合内网穿透实现公网访问本地WebUI界面

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

基于51单片机点滴输液控制系统LCD显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机点滴输液控制系统LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机点滴输液控制系统LCD显示( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上…

SpringBoot 集成Swagger3

说明: 1)、本文使用Spring2 集成Swagger3, 本想使用Springboot3 jdk 17 集成Swagger3, 但是搜了一些资料,Spring 想引用swagger3 需要依赖降级使用Spring2 版本,不然会出现下图的报错信息, 或者使用Sprin…

python笔记 | 哥德巴赫猜想

哥德巴赫猜想:每个不小于6的偶数都可以表示成两个素数之和。 素数:只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如,2、3、5、7、11等都是素数,而4、6、8、9等则不是素数。 下面这段Python代码…

Python学习(四)文件操作

文件操作 想想我们平常对文件的基本操作,大概可以分为三个步骤(简称文件操作三步走): ① 打开文件 ② 读写文件 ③ 关闭文件 注意:可以只打开和关闭文件,不进行任何读写 在Python,使用open函数,可以打开一个已经存在的文件&…

【Java】处理工具类详解

在Java开发中,日期和时间的处理是一个绕不开的话题。Java自身提供了丰富的API来处理日期和时间,但是使用起来可能较为繁琐。因此,许多开发者会使用一些工具类来简化日期和时间的处理。本文将介绍一个常用的日期处理工具类——DateUtils&#…

环形链表的约瑟夫问题(牛客网)

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param n int整型 * param m int整型 * return int整型*/struct ListNode * BuyNode(int n)//创建节点和成环{ struct ListNode *pheadNULL;struct ListNode *ptailN…

吐血整理!跨境电商全年选品方向!一年12个月热点解析

一月 演出服、礼盒、贺卡、装饰品、彩带、拉花、红地毯、邀请函、荧光棒、泡泡机等。 二月 超级碗:投影仪、蓝牙音箱、超级碗电子游戏、望远镜、运动类产品等; 情人节:珠宝、服饰饰品、巧克力、香水、口红、烘焙用品、礼盒、个人护理、成…

MySQL常用命令和函数的讲解以及表之间的联结

Mysql的中一些语句的用法: 有表: CREATE TABLE book (id int(20) NOT NULL,book_name varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 书名,press varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NUL…

pymavlink 解析自定义mavlink消息。

1.下载mavlink_master包,用于将xml 文件生成对应的py文件。地址是 https://codeload.github.com/mavlink/mavlink/zip/refs/heads/master 进入目录运行python .\mavgenerate.py 呈现gui程序 2.根据发送端的消息定义格式修改接收解析段的pymavlink有关库。 可修改……

基于大数据的手机销售数据分析可视化系统,爬取京东和淘宝的的手机商品数据进行分析,Flask,Python,数据可视化

介绍 该系统主要是通过爬取京东和淘宝的的手机商品数据进行分析。爬虫python脚本通过打开浏览器授权登录后按照搜索“手机”关键字后出现的商品列表进行爬取,获取标题名,解析付款人数,品牌,评论人数,发货地&#xff0…

算法学习——LeetCode力扣补充篇14(179. 最大数、43. 字符串相乘、32. 最长有效括号、543. 二叉树的直径、113. 路径总和 II)

算法学习——LeetCode力扣补充篇14 179. 最大数 179. 最大数 - 力扣(LeetCode) 描述 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大&…

吴恩达2022机器学习专项课程(一) 第二周课程实验:特征缩放和学习率(多元)(Lab_03)

备注:笔者只对个人认为的重点代码做笔记,其它详细内容请参考吴恩达老师实验里的笔记。 1.多元特征的训练集 调用load_house_data()函数,将训练集数据保存到数组中。 X,y分别存储所有训练样本的前四列,所有训练样本的…

python中的列表、元组、字典、集合(集合篇)

数据类型定义符号访问元素是否可变是否重复是否有序列表 [ ]索引可变可重复有序元组()索引不可变可重复有序字典{key:value}键可变可重复无序集合{ }可变不可重复无序 基本概念 python语言中的集合是无序的、可变的容器类对象,所…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中,查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

NLP学习(1)-搭建环境

前言 仅记录学习笔记,如有错误欢迎指正。 环境搭建 一、环境软件安装: 1、Anaconda安装(一款可以同时创建和管理多个python环境的软件) (1) 安装链接: https://blog.csdn.net/m0_61531676/article/details/126290…

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

Ribbon 添加右侧区域菜单项

效果图如下所示: 类似与上图效果所示,代码如下: RibbonPage* pageHome1 ribbonBar()->addPage(tr("Home")); //实现代码: { QMenu* menuOptions ribbonBar()->addMenu(tr("Options"))…

古籍数字化平台:精校功能介绍

一、平台介绍 古籍数字化平台,本着公益性、低成本、合作共赢的三大原则,功能涵盖古籍OCR识别、族谱县志OCR识别、民国报纸OCR识别、图文逐字校对、数据著录、智能标点分段、精编排版、智能白话译文等,是一站式线上整理全流程平台。 平台集成…