图卷积神经网络GCN之节点分类

article/2025/9/18 22:38:08

使用pytorch 的相关神经网络库, 手动编写图卷积神经网络模型(GCN), 并在相应的图结构数据集上完成节点分类任务。本次实验的内容如下:

  1. 实验准备:搭建基于GPU的pytorch实验环境。
  2. 数据下载与预处理:使用torch_geometric.datasets、torch_geometric.loader所提供的标准数据接口Planetoid、PPI、DataLoader,将原始数据处理为方便模型训练脚本所使用的数据结构。
  3. 图网络模型:手动搭建GCN模型。
  4. 节点分类:在给定数据集上按照节点分类任务的需求自行划分训练集、验证集、测试集,并用搭建好的GCN模型进行节点分类。
  5. 模型训练:在给定数据集上训练模型并分析结果。

对应的源代码下载链接 :

https://download.csdn.net/download/m0_61142248/87657656

1.搭建实验环境

搭建GPU版Pytorch实验环境如下:

名称

版本

备注

Python

3.8

Pytorch

1.12.1

GPU

RTX2060

安装对应版本的cuda

 2.图网络模型搭建

参考GCN论文,GCN的核心原理公式为 H^{l+1}=\sigma\left ( D^{1/2}AD^{-1/2}H^{l}W^{l} \right )。因为邻接矩阵在迭代的每一步都是相同的,可以将上述公式中不变的部分提取出来提前处理,迭代过程中只计算变化部分,从而减少运算量。因此将上述公式分解为两步:

  1. A=D^{^{1/2}}AdjD^{-1/2}
  2. H^{l+1}=AH^{l}W^{l}   

其中,Adj 是图的原始邻接矩阵,D是度矩阵, 的运算在网络模型训练前实现,A是经过处理后的邻接矩阵。

在图数据的处理中实现A=D^{^{1/2}}AdjD^{-1/2}计算,代码如下:

在网络模型中只实现 H^{l+1}=AH^{l}W^{l},另外需要定义模型参数W等初始化参数以及forward函数。本次实验要求对自环、层数、 DropEdge、PairNorm、激活函数等因素分析,因此在模型 中加入了这些参数,另外模型中的in_features和out_features分别表示输入特征维度和输出特征维度。代码如下:

子函数reset_parameters代码如下:

forward函数实现H^{l+1}=AH^{l}W^{l}计算,其中input为输入特征,adj为输入邻接矩阵(经过 运算处理),bias是偏置项,output为输出。具体代码如下:

此外,参考了PairNorm和DropEdge的论文和代码来实现PairNorm和DropEdge函数。具体代码如下:

PairNorm:

DropEdge:

3.节点分类模型搭建

在节点分类任务中搭建了一个由前述GCN网络组成的多层GCN分类网络。节点分类模型初始化函数如下:

其中各参数含义如下:

  • nfeat为输入特征维度;
  • nhid为GCN隐藏层维度;
  • nclass为输出特征维度;
  • dropout为特征的dropout率;
  • SelfLoop为是否加自环的标志;
  • num_layers表示该分类模型的总层数;
  • norm_mode表示是否使用batchnorm;
  • use_PairNorm表示是否使用PairNorm;
  • activation为激活函数的参数,表示使用哪种激活函数。

节点分类模型中间层的激活函数由输入参数‘activation’确定,输出的特征维度为‘nhid’。最后一层也是GCN层,输出维度为‘nclass’,最后的输出增加了log_softmax()函数。

Cora、Citeseer数据集的节点分类模型的forward函数代码如下:

 4.Cora、Citeseer数据集预处理

Cora、Citeseer数据集是比较常用的数据集,直接百度即可下载。本文中读入的数据格式如下:

 处理代码如下,其中对test_idx进行排序是为了避免邻接矩阵和节点特征矩阵在测试集部分错位。

训练、验证和测试集的划分:

数据集默认划分了训练、验证和测试集,但训练集较小,因此对数据集进行了重新划分。allx、ally和tx、ty可以构成完整的数据集,其中测试集保持不变仍为tx、ty。取allx、ally中的最后500个作为验证集,剩余的都作为训练集。如此,对于cora数据集划分如下训练集(1208)、验证集(500)、测试集(1000)。对于citeseer数据集划分如下训练集(1812)、验证集(500)、测试集(1015)。

图、邻接矩阵、特征和标签的处理以及训练、验证和测试集的划分代码实现如下:

5.训练与分析

依据实验要求对不同参数进行了测试分析。虽然不同参数配置下可以通过调整学习率等超参数来提高性能,但为了便于比较,训练时采取了只变动比较项,其余部分参数固定的方法来分析。其中所有测试下都固定不变的参数如下表所示:

固定不变的训练参数

名称

lr

weight_decay

hidden 

lradjust

dropout

epochs

数值

0.01

5e-3

256

Ture

0.8

400

测试了GCN层数为2、4、8、16、32层时图网络模型在Cora、Citeseer和PPI数据集上的分类性能以及自环、batch_norm、PairNorm和激活函数等因素对分类性能的影响。

在Cora数据集和Citeseer数据集的实验中,使用Adam优化器。学习率初始值为0.01,采用了多步衰减策略,参数为“milestones=[150, 250, 350], gamma=0.5”。损失函数使用torch.nn.functional中的nll_loss。性能评价指标为acc。

最终得到的最佳的性能和对应的训练参数如下:

对于数据集cora,在测试集上获得的分类acc指标为0.853,设置训练参数如下:

名称

lr

weight_decay

hidden 

lradjust

dropout

epochs

数值

0.01

5e-3

256

Ture

0.8

100

名称

num_layers

add_self_loops

add_bn

use_pairnorm

drop_edge

activation

数值

4

FALSE

FALSE

None

1

linear

 对于数据集citeseer,在测试集上获得的分类acc指标为0.783,设置训练参数如下:

名称

lr

weight_decay

hidden 

lradjust

dropout

epochs

数值

0.01

5e-3

256

Ture

0.8

100

名称

num_layers

add_self_loops

add_bn

use_pairnorm

drop_edge

activation

数值

4

FALSE

TRUE

None

1

tanh


http://chatgpt.dhexx.cn/article/3fjtebpE.shtml

相关文章

win10下使用pycharm实现基于pyg的cora+citeseer+pubmed数据集的JKNET模型测试

目录 前期准备工作 1、数据集基本情况 2、标准数据集划分方式 3、数据集处理和分析 整体数据分析 cora citeseer pubmed 4、代码参考 GraphSAGE实验结果(代码详细注释) 1、代码结构 2、超参数 3、实验结果(pubmed+mean_pool+sum) 2层SageGCN层 实验补充 3层S…

GraphSAGE模型实验记录(简洁版)【Cora、Citeseer、Pubmed】

1、准备工作 数据集 数据集图节点边特征标签(y)Cora12708542914337Citeseer13327473237036Pubmed119717443385003 数据集划分方式:https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised L…

GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式

文章目录 Cora、Citeseer、Pubmed以Cora为例数据格式示例 Tox21 数据集 本文分享一下图卷积网络GCN里用到的一些数据集的格式 Cora、Citeseer、Pubmed 数据集来源#图#节点#边#特征#标签(y)Cora“Collective classification in network data,” AI magazine,200812708542914337…

小白的靶机VulnHub-Stapler

从这一台靶机开始 就要上VirtualBox了 开机界面就是个这 就凑合一下 开桥接 确定靶机ip地址 :192.168.56.102 要上 了哦!!!!! 扫出 好多 好多 端口 像极了一个蜜罐 我淦 从ftp 入手吧 进行匿名登录 进…

Vulnhub-靶机-Stapler 1

Vulnhub—靶机—Stapler 1 本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关 文章目录 Vulnhub—靶机—Stapler 1一、信息收集二、漏洞利用三、Flag 一、信息收集 【步骤一】使…

调用Jenkins api报错 403 forbidden

** 调用Jenkins api报错 403 forbidden ** String url url "/computer/doCreateItem?nametest&typehudson.slaves.DumbSlave";HttpHeaders headers new HttpHeaders();MultiVpalueMap<String, String> parameters new LinkedMultiValueMap<>()…

Vulnhub 靶机 Stapler write up samba+wp advanced-video ->mysql 密码 连接 john解密 登录后台 wp插件getshell sudo提权

Stapler write up 0x00 靶机搭建0x01 信息收集0x02 漏洞挖掘web思路mysql 思路ftp 思路139 samba思路步骤一&#xff1a;ftp匿名访问步骤二&#xff1a;samba139测试步骤三&#xff1a;web渗透 80步骤四&#xff1a;web渗透12380端口步骤五&#xff1a;利用wordpress漏洞步骤六…

macOS分发app打包+签名+公证+添加票据+生成dmg文件

1.打包 网上有很多使用命令行的打包的方式大家可自行查找,以下是使用Xcode进行打包. 首先配置证书要配置Developer ID Application证书然后使用的是Xcode进行打包:Product->Archive 这种打包方式的好处是省去了签名的过程,但是用网上其他人的命令查看签名时候还是未成功&a…

CTF实战之Stapler

CTF实战之Stapler Penetrating Methodology: 0x01 网络扫描&#xff08;Nmap, netdiscover&#xff09; nmap -sP 192.168.153.0/24 通过筛选找到靶机地址 扫描靶机端口 nmap -sT -T4 -sV -p 1-65535 192.168.153.154通过端口扫描发现靶机开了很多端口 我们一个一个来 …

Jenkins 远程命令执行漏洞 (CVE-2018-1000861)复现

文章目录 漏洞描述&#xff08;介绍、成因&#xff09;漏洞危害适用场景实验环境漏洞复现过程1、 开启docker环境2、通过dnslog检测漏洞是否存在3、监听端口4、利用exp获取反弹shell 修复建议扩展知识&#xff08;链接、文章&#xff09; 漏洞描述&#xff08;介绍、成因&#…

VulnHub-STAPLER: 1-靶机渗透学习

靶机地址&#xff1a;https://www.vulnhub.com/entry/stapler-1,150/ 靶机难度&#xff1a;中级&#xff08;CTF&#xff09; 靶机描述&#xff1a;Stapler is reported to be one of several vulnerable systems that are supposed to assist penetration testers with challe…

【甄选靶场】Vulnhub百个项目渗透——项目十:stapler-1(文件上传,多方式提权)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目十&#xff1a;stapler-1&#xff08;文件上传&#xff0c;多方式提权&#xff09; 靶场环境 &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&…

vulnhub靶机:Stapler

文章目录 0x000x01 靶机安装0x02 靶机发现0x03 端口探测0x04 信息收集端口21&#xff1a;FTP服务端口22&#xff1a;SSH服务端口80&#xff1a;HTTP服务端口139&#xff1a;SMB服务端口666&#xff1a;未知服务端口3306&#xff1a;MySQL服务端口12380&#xff1a;HTTP服务 0x0…

实战打靶集锦-006-Stapler

**写在前面&#xff1a;**记录博主的一次打靶经历。 目录 1. 主机发现2. 端口发现3. 服务枚举4. 服务探查4.1 FTP探查4.1.1 匿名登录4.1.2 Elly用户4.1.3 John用户4.1.4 EXP搜索 4.2 dnsmasq探查4.2.1 基础信息获取4.2.2 EXP搜索 4.3 WEB应用探查4.3.1 浏览器访问4.3.2 目录扫描…

Stapler: 1

Stapler: 1 项目地址&#xff1a;https://www.vulnhub.com/entry/stapler-1,150/ 文章目录 Stapler: 1一、信息收集&#xff1a;1. 靶机地址获取&#xff1a;2. 收集端口服务信息&#xff1a; 二、信息利用1. 针对12380端口进行web目录枚举&#xff1a;1.1 访问&#xff1a;ph…

No.10-VulnHub-Stapler: 1-Walkthrough渗透学习

** VulnHub-Stapler: 1-Walkthrough ** 靶机地址&#xff1a;https://www.vulnhub.com/entry/stapler-1,150/ 靶机难度&#xff1a;中级&#xff08;CTF&#xff09; 靶机发布日期&#xff1a;2016年6月8日 靶机描述&#xff1a;Stapler is reported to be one of several v…

Stapler:1 靶机渗透测试-Vulnhub(STAPLER: 1)

Stapler&#xff1a;1&#xff08;STAPLER: 1&#xff09;靶机渗透-Vulnhub 一、IP端口探测二、端口信息收集1.ftp匿名登录2.OpenSSH漏洞查询3.80端口4.666端口5.SMB枚举6.12380端口 二、边界突破1.video插件文件包含2.修改wordpress数据库管理员密码3.上传webshell 三、提权总…

Stapler#攻略

写在前面&#xff1a;前人栽树后人乘凉&#xff0c;谢谢网上各位大佬的解题思路作为参考学习&#xff1b; 一、实验准备 1、实验地址&#xff1a; Stapler: 1 ~ VulnHub 2、下载之后&#xff0c;本地解压&#xff0c;用VMware运行该虚拟机&#xff1b; ​ 3、设置stapler与攻击…

Stapler-1靶场详细教学(7种漏洞利用+5种提权)

目录 前言 简介 信息收集 0x00 主机发现 0x01 端口探测 0x02 信息收集-1 0x03 信息收集-2 0x04 漏洞利用-1 0x05 信息收集-3 0x06 漏洞利用-2 0x07 漏洞利用-3 0x08漏洞利用-4 0x09 漏洞利用-5 0x10 漏洞利用-6 0x11 漏洞利用-7 提权 0x12 提权-1-内核提权 0…

CSDN开通博客

今天想写博客&#xff0c;却发现没有开通博客页面没有发现验证码&#xff0c; 后来点击验证码输入框&#xff0c;验证码才出来。真是失策&#xff0c;我觉得还是在刷新页面的时候就显示验证码就好了。