GNN各阶段执行时间实验【Citeseer、Pubmed、Reddit、OGB数据集】

GNN各阶段执行时间实验【Citeseer、Pubmed、Reddit、OGB数据集】

数据集

包括Citeseer、Pubmed、Reddit、OGB数据集的说明、数据集的划分、各数据集的介绍。

数据集 节点 特征(x) 标签(y)
Citeseer 1 3327 4732 3703 6
Pubmed 1 19717 44338 500 3
Reddit 1 232965 11606919 602 41
ogbn-arxiv 1 169343 1166243 128 40
ogbn-products 1 2449029 61859140 100 47
数据集划分(数量) 训练集 验证集 测试集
Citeseer 120 500 1000
Pubmed 60 500 1000
Reddit 153431 23831 55703
ogbn-arxiv 90941 29799 48603
ogbn-products 196615 39323 2213091

Citeseer、Pubmed

目前有三个流行的引文网络「小数据集」:Cora、Citeseer和Pubmed。这些benchmark由Kipf和Welling在GCN模型中推出。

我的博客:节点分类任务中的引文网络benchmark

Reddit

Reddit是一个大型的在线讨论论坛,我们使用Reddit帖子构建了一个图数据集。节点代表帖子,边代表同一个用户对这两个帖子都发表了评论。这个数据集总共包含232965个节点,平均度为492。

数据集下载地址:https://data.dgl.ai/dataset/reddit.zip

OGB数据集

在这里插入图片描述
在这里插入图片描述

### 下载和划分 CiteSeer 数据集 CiteSeer 是一个经典的数据集,常用于图神经网络的研究和评估。以下是关于如何下载以及划分该数据集的具体方法。 #### 使用 PyTorch Geometric (PyG) 下载 CiteSeer 数据集 PyTorch Geometric 提供了一个便捷的方法来加载常见的数据集,包括 CiteSeer。可以通过 `torch_geometric.datasets.Planetoid` 类轻松获取此数据集[^2]。 ```python from torch_geometric.datasets import Planetoid # 设置根目录路径和数据集名称 dataset_name = 'CiteSeer' root_path = './data' # 加载 CiteSeer 数据集 dataset = Planetoid(root=root_path, name=dataset_name) # 获取第一个(也是唯一一个)对象 data = dataset[0] print(f"Dataset: {dataset}") print("==================") print(f"Number of graphs: {len(dataset)}") # 输出应为1 print(f"Number of features: {dataset.num_features}") # 节点特征维度 print(f"Number of classes: {dataset.num_classes}") # 类别数量 ``` 上述代码会自动从指定 URL 下载 CiteSeer 数据集到本地文件夹,并将其存储为适合 PyTorch Geometric 的格式[^4]。 --- #### 划分训练集、验证集和测试集 在实际应用中,通常需要将数据划分为训练集、验证集和测试集以便于模型的训练与评估。以下是一个简单的划分方式: ```python import torch # 设定随机种子以保证可重复性 torch.manual_seed(42) # 初始化掩码张量 num_nodes = data.x.size(0) train_mask = torch.zeros(num_nodes, dtype=torch.bool) val_mask = torch.zeros(num_nodes, dtype=torch.bool) test_mask = torch.zeros(num_nodes, dtype=torch.bool) # 随机分配节点至不同集合 indices = torch.randperm(num_nodes) n_train = int(num_nodes * 0.6) # 训练集占比 n_val = int(num_nodes * 0.2) # 验证集占比 train_indices = indices[:n_train] val_indices = indices[n_train:n_train + n_val] test_indices = indices[n_train + n_val:] train_mask[train_indices] = True val_mask[val_indices] = True test_mask[test_indices] = True # 将新的掩码赋值给原始数据对象 data.train_mask = train_mask data.val_mask = val_mask data.test_mask = test_mask print(data.train_mask.sum()) # 查看训练集大小 print(data.val_mask.sum()) # 查看验证集大小 print(data.test_mask.sum()) # 查看测试集大小 ``` 以上代码实现了基于比例的手动划分逻辑。如果希望更简单地操作,则可以直接利用 PyTorch Geometric 自带的数据集中预定义好的分割方案[^3]。 --- #### 特征标准化处理 为了提高模型收敛速度,在输入 GNN 模型之前可以对节点特征进行标准化处理。例如采用 Z-Score 标准化技术: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() features_numpy = data.x.numpy() scaled_features = scaler.fit_transform(features_numpy) data.x = torch.tensor(scaled_features, dtype=torch.float32) print("Feature matrix after normalization:") print(data.x.mean(dim=0)) # 应接近零均值 print(data.x.std(dim=0)) # 应接近单位方差 ``` 这一步骤有助于提升某些优化算法的表现效果。 --- ### 总结 通过 PyTorch Geometric 可快速完成 CiteSeer 数据集的下载工作;随后可根据需求自定义或者沿用默认策略来进行样本拆分;最后还可能涉及必要的前处理步骤如特征缩放等操作。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值