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

本文通过调整GCN、GraphSAGE及GAT等GNN模型的隐藏层参数,在Cora数据集上进行节点分类任务,探讨了隐藏层深度、维度及注意力头数对模型性能的影响。

用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。

### 图神经网络 (Graph Neural Network, GNN) 超参数调优的最佳实践 超参数调优对于提升图神经网络GNN)性能至关重要。以下是关于如何优化 GNN 的一些最佳实践: #### 数据预处理与特征工程 数据的质量直接影响模型的表现。在训练之前,应考虑对输入图结构和节点特征进行适当处理。例如,可以通过标准化或归一化节点特征来减少数值范围差异的影响[^1]。 #### 学习率的选择 学习率是一个关键的超参数,它决定了梯度下降过程中每次更新的步伐大小。通常建议从较小的学习率开始实验,并通过观察损失函数的变化趋势逐步调整至更合适的值。自适应优化器如 Adam 可自动调节每轮迭代中的实际步长,因此常被推荐用于初始设置[^2]。 #### 正则化技术的应用 为了防止过拟合并增强泛化能力,可以采用多种正则化方法。一种有效的方式是在每一层加入随机扰动作为额外约束条件;这种方法不仅有助于探索不同的解空间位置,还能增加系统的稳定性与抗干扰性。此外,dropout 技术也可以应用于隐藏单元之间连接处以降低复杂度风险。 #### 层数与宽度的设计考量 层数过多可能导致计算成本过高以及潜在的信息丢失问题,而不足又可能无法充分捕捉到深层次关系模式 。一般而言 ,两到三层已经能够很好地适用于大多数场景需求下完成任务目标设定所期望达到的效果水平 [^1]. 同样重要的是确定各卷积核尺寸及其对应通道数配置方案——这将直接影响局部区域感知能力和表达力强弱程度之间的平衡取舍决策过程之中 。 #### 批量大小影响分析 批量大小会影响收敛速度和平滑度。较大的批次可能会带来更快但不那么精确的方向估计,反之亦然。找到适合特定硬件资源限制条件下最优组合点往往需要经过多次尝试比较之后才能得出结论 。 ```python import torch from torch_geometric.nn import GCNConv class SimpleGCN(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, dropout_rate=0.5): super(SimpleGCN, self).__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, output_dim) self.dropout = torch.nn.Dropout(dropout_rate) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = torch.relu(x) x = self.dropout(x) x = self.conv2(x, edge_index) return torch.log_softmax(x, dim=1) ``` 上述代码展示了一个简单的基于 PyTorch Geometric 实现的二层 GCN 架构实例,其中包含了 Dropout 正则化的应用示例。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值