GNN第一次炼丹总结(调参总结)

1 篇文章 0 订阅

用GCN、graphSAGE、GAT处理Cora数据集的节点分类任务。

目标:调 隐藏层数目、隐藏层的维度、训练次数

默认固定参数:学习率lr =0.01 权重衰减weight_decay 5e-3 优化器 ADAM dropout = 0.5

GAT 使用多头注意力 默认为 3。

展示的结果,都是多次训练中最好的结果。

对比1: 此时 隐藏层数目为2,训练次数500

            model\隐藏层维度3264128

GraphSage

0.7780.780.78

GCN

0.7720.790.79

GAT

0.7640.7740.776

基本上  随着隐藏维度的上升,模型效果变好,但是提升的幅度在变小

注:GAT效果还没其他模型好

对比2: 此时隐藏层维度32,训练次数500

model \  隐藏层数目(深度)281632
GraphSage0.7920.3160.3160.316
GCN0.7740.3120.2320.278
GAT0.7680.3160.3160.316

显而易见,出现了oversmoothing。

对比3:此时隐藏层维度32,训练次数500

model \  隐藏层数目(深度)2345
GraphSage0.7740.770.4060.442
GCN0.7620.7740.250.226
GAT0.7740.770.7520.716

显而易见,还是有oversoothing。从实验结果看,对于core数据集,隐藏层数目为三层效果最好。超过三层就开始出现oversoothing。根据结果,似乎对于GAT,它oversmoothing衰减的较慢。

注:可以通过一些手段克服oversmoothing

对比4:此时隐藏层维度为32,隐藏层数目为2

model \  训练次数1005001000500050000
GraphSage0.7760.7840.7840.784
GCN0.7320.7760.7540.778
GAT0.7760.770.7780.784

50000次时间太久了,略过。根据现有的结果也能看出来,GNN对训练次数要求不是很高,基本上五百次就够了!

对比5: 隐藏层维度为64,隐藏层为3层,训练次数为1000

   model \  heads2516
GAT0.7760.7860.79

根据结果,可以看出来,多头注意力机制,头越多结果越好

注: 不知道为什么在GAT最后结果中并没有使用正则化,而且我使用L2正则化后效果也没变得更好。

ps: CORA数据集就一个图,所以就不需要batch,那么也就不需要batch normalization

其他:使用的GNN模型都是使用自己写的GNN层,没有调用pyG里面封装的。最后取得的效果差强人意,不知道为什么我的GAT结果并不是很好。当然其他模型也没有别人的结果好。论文里面在处理cora数据集的节点分类任务时,GCN、GAT 准确度分别为81.5 和83.1。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Python来构建一个图神经网络GNN),它使用多层神经网络(NN)来处理图数据结构中的复杂关系,从而改善图建模的准确性。GNN具有可扩展性,可以使用不同类型的图数据,包括社交网络、语言模型、图像识别和自然语言处理。 ### 回答2: GNN,即图神经网络(Graph Neural Network),是一种用于处理图结构数据的机器学习方法。在Python中,可以使用许多深度学习框架(如PyTorch和TensorFlow)来实现GNN模型。 下面是一个使用PyTorch编写的简单GNN模型的示例代码: ```python import torch import torch.nn.functional as F from torch.nn import Linear, Module from torch_geometric.nn import ChebConv class GNN(Module): def __init__(self, in_channels, hidden_channels, out_channels): super(GNN, self).__init__() self.conv1 = ChebConv(in_channels, hidden_channels, K=2) self.conv2 = ChebConv(hidden_channels, out_channels, K=2) self.lin = Linear(out_channels, 2) def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) x = self.lin(x) return F.log_softmax(x, dim=1) ``` 这个示例代码实现了一个包含两个ChebConv层和一个线性层的GNN模型。ChebConv层是一种图卷积网络层,用于在图结构数据上进行卷积操作。这个GNN模型接受输入特征x和边索引edge_index作为输入,并输出分类结果。 你可以根据实际需要调整模型的层数和参数,例如增加更多的卷积层或使用其他种类的图卷积层。但这个示例代码能够帮助你理解如何在Python中实现一个简单的GNN模型。 ### 回答3: GNN(图神经网络)是一种用于处理图数据的深度学习模型。在Python中,我们可以使用PyTorch和DGL(Deep Graph Library)等库来实现一个GNN模型。 首先,我们需要安装相应的库和依赖项。可以使用pip命令安装PyTorch和DGL库,并确保其它辅助库(如numpy、scikit-learn等)也已安装。 接下来,我们需要准备图数据集。可以从DGL的官方文档中找到一些图数据集的示例,或者根据自己的需求生成一个图数据集。 然后,我们可以开始构建GNN模型。首先,需要定义一个包含多个图卷积层(Graph Convolution Layer)的GNN模型类。可以参考DGL的文档中的示例代码来定义和实现这些图卷积层。 在定义图卷积层之后,我们需要实现前向传播(Forward Propagation)和反向传播(Backward Propagation)函数。前向传播函数用于计算模型的输出,反向传播函数用于更新模型参数。 接下来,我们需要定义损失函数和优化器。可以选择合适的损失函数(如交叉熵损失函数)和优化器(如Adam优化器)来训练模型。 最后,我们需要进行模型训练和测试。可以将数据集划分为训练集和测试集,并使用训练集对模型进行训练,然后使用测试集评估模型的性能。 综上所述,使用Python编写一个GNN模型涉及到安装库和依赖项、准备图数据集、构建GNN模型、实现前向传播和反向传播函数、定义损失函数和优化器、以及进行模型训练和测试。这只是一个大致的步骤,具体实现过程可能会有所不同,具体操作需要根据具体需求和情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值