图卷积神经网络GCN之链路预测

使用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/87657680

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模型与节点分类任务相同,链路预测任务的模型采用了GAE网络模型。GAE网络模型包含一个由多层GCN组成的编码器和一个内积运算组成的解码器,其中GCN基础层与前述节点分类中提到的GCN网络相同。GAE网络模型的具体实现代码如下:

GAE网络初始化部分:

编码器与解码器: 

 4.Cora、Citeseer数据集预处理

数据读取,根据实验任务参数,分别读取cora和citeseer数据集。

数据集划分,在每个数据集的图中存在的链接数往往都是远小于不存在的链接数的,即图中的正样本数量远小于负样本数量。为了使模型训练较为均衡,通常先将正样本分为训练集、验证集和测试集,然后再分别从三个数据集中采样等同数量的负样本参与训练、验证以及测试。这里使用RandomLinkSplit函数将图随机划分为训练集、验证集和测试集,比例为0.8:0.1:0.1。add_negative_train_samples为False表示不对训练集进行负采样,只对测试集和验证集进行负采样,每个子集的正负样本比例为1:1。训练集的负样本在训练时采集。

邻接矩阵处理:

5.训练与分析

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

固定不变的训练参数

测试了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。

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

名称

lr

weight_decay

hidden 

lradjust

dropout

epochs

数值

0.01

5e-3

256

Ture

0.8

400

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

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

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

名称

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

linear

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

名称

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

linear

 

  • 12
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
卷积神经网络(Graph Convolutional Neural Network,GCN)是一种应用于数据的深度学习模型。其主要目的是通过利用结构的局部连接和节点特征的传播来进行节点分类和分类任务。为了改进GCN模型,可以考虑以下方法: 1. 基于扩散卷积神经网络(DCNN)的改进:DCNN是一种利用中节点之间的扩散过程进行卷积操作的神经网络模型。可以借鉴DCNN中的扩散过程,将其引入GCN中,以提高GCN的表达能力和分类性能。 2. 基于信息传递神经网络(MPNN)的改进:MPNN是一种利用消息传递机制进行数据处理的神经网络模型。通过在GCN中引入MPNN的思想和机制,可以增强GCN结构的理解和节点特征的传播能力,从而提升GCN的性能。 3. 基于概率模型的改进:可以借鉴CGMM(NN4G概率模型)的思想,使用概率模型来描述节点之间的关系和特征传播过程。这样可以更灵活地建模结构和节点特征之间的关系,并提高GCN的分类准确性和解释性。 综上所述,可以通过引入扩散卷积神经网络、信息传递神经网络和概率模型等方法来改进卷积神经网络GCN)。这些改进方法可以提高GCN的表达能力、分类性能和解释性,使其更适用于数据的深度学习任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [GCN演变及改进整理](https://blog.csdn.net/qq_60272314/article/details/120467382)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

动力澎湃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值