适用于图神经网络GNN/GCN/GAT的cora数据集预处理代码

适用于图神经网络GNN/GCN/GAT的cora数据集预处理代码

cora数据集预处理

cora数据集介绍

Cora数据集由机器学习论文组成,是近年来图深度学习常使用的数据集。在数据集中,论文分为以下七类之一:

  • 基于案例
  • 遗传算法
  • 神经网络
  • 概率方法
  • 强化学习
  • 规则学习
  • 理论

Cora数据集包含2708篇论文,开源的数据集下载后包含两个文件:.content和.cites

.content文件包含以下格式的论文描述:

<paper_id> <word_attributes>+ <class_label>

每行的第一个条目是论文的唯一字符串标识,后跟二进制值,表示词汇中的每个单词在文章中是存在(由1表示)还是不存在(由0表示)。该行的最后一个条目是论文的类别标签。因此数据集的feature的维度是2708 × 1433。第一行为idx ,最后一行为label
cora.content文件
.cites文件包含语料库的引用’图’。每行以以下格式描述一个链接:

<被引论文编号> <引论文编号>

每行包含两个论文id。第一个条目是被引用论文的标识,第二个标识代表是引用的论文。链接的方向是从右向左。如果一行由“论文1 论文2”表示,则链接是“论文2 —>论文1”。可以通过论文之间的索引关系建立邻接矩阵adj
cora.citest文件
数据集下载地址:https://linqs.soe.ucsc.edu/data

预处理代码

虽然图深度学习中数据预处理很重要,但它不应该成为浪费我们过多时间的步骤,专注于模型算法的研究才更为主要。本小白为了跑自己的数据,在网上查了很多方法,但网上都是经过处理好的’x’, ‘y’, ‘tx’, ‘ty’, ‘allx’, ‘ally’, 'graph’对象,GAT的源码也是沿用GCN的预处理过程,对上述已经预处理过的数据继续处理,没有给出如何从原始数据进行处理的具体过程。

如果想要构建自己的数据集去跑模型,不是很方便。而且上述预处理数据使用pickle模块进行存储(ind.cora.x、ind.cora.y、ind.cora.allx等),存储成.pkl文件,手动打开全都乱码,还得使用python读一下,也不是很方便。

这里借鉴了GAT/GCN数据预处理的一些过程,给出了从原始数据集到可送入模型训练的对象的代码,仅供需要的同学们参考。主要思路就是,构建输入模型需要的邻接矩阵、特征、标签、mask(如果用到的话)。


import scipy.sparse as sp  # 稀疏矩阵库
import numpy as np


def load_data(path="data/cora/", dataset="cora"):
    """Load citation network dataset (cora only for now)"""
    print('Loading {} dataset...'.format(dataset))

    idx_features_labels = np.genfromtxt("{}{}.content".format(path, dataset), dtype=np.dtype(str))
    features = sp.csr_m
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的示例代码,展示了如何使用PyTorch Geometric库实现一个神经网络(Graph Neural Network,GNN)模型: ```python import torch import torch.nn as nn import torch.nn.functional as F from torch_geometric.datasets import Planetoid from torch_geometric.nn import GCNConv # 加载数据集 dataset = Planetoid(root='data/Cora', name='Cora') data = dataset[0] class GNNModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(GNNModel, self).__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, output_dim) def forward(self, x, edge_index): x = F.relu(self.conv1(x, edge_index)) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) # 配置模型和优化器 input_dim = dataset.num_features hidden_dim = 16 output_dim = dataset.num_classes model = GNNModel(input_dim, hidden_dim, output_dim) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4) # 训练模型 model.train() for epoch in range(200): optimizer.zero_grad() out = model(data.x, data.edge_index) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() # 测试模型 model.eval() _, pred = model(data.x, data.edge_index).max(dim=1) correct = int(pred[data.test_mask].eq(data.y[data.test_mask]).sum().item()) acc = correct / int(data.test_mask.sum()) print(f'Test Accuracy: {acc:.4f}') ``` 上述代码使用了PyTorch Geometric库来加载Cora数据集,并根据GCN(Graph Convolutional Network)模型的架构实现了GNN模型。模型的前向传播通过两个GCNConv层实现,使用ReLU作为激活函数,并使用log_softmax输出。然后使用Adam优化器进行训练,并使用负对数似然损失进行监督学习。最后,将模型切换到评估模式,计算测试集上的准确率。 请注意,这只是一个简单的示例,实际应用中可能需要根据需求进行调整和优化。你可以根据自己的数据集和任务来修改和扩展这个代码。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值