目录

easyGnn: Cora Node Classification with GCN

本项目基于 Jittor 和 JittorGeometric 实现两层 GCN,用于完成 Cora 图节点分类任务。代码入口为 gcn.py,运行后会训练模型、打印训练集/验证集准确率,并导出测试集预测结果 result.json

环境安装

推荐环境:

  • Python 3.8 或更高版本
  • Jittor
  • JittorGeometric
  • NumPy
  • CUDA 环境,脚本中默认启用 jt.flags.use_cuda = 1

安装依赖示例:

pip install numpy
pip install jittor

jittor_geometric 请按照比赛环境或 JittorGeometric 官方安装方式配置。如果比赛平台已经预装 Jittor/JittorGeometric,可直接使用平台环境运行。

如需指定 C++ 编译器,当前代码中使用:

os.environ["cc_path"] = "/usr/bin/g++-11"

如果本地环境编译器路径不同,请在 gcn.py 中按实际环境修改该路径。

数据准备

请将数据文件 cora.pkl 放到代码中配置的数据根目录下,或者自行修改数据读取路径。当前 gcn.py 使用的数据根目录为:

/data/zt/jitor/data

期望目录结构如下:

/data/zt/jitor/data/
├── cora.pkl
└── result/

其中 result/ 用于保存最终预测文件。如果目录不存在,请先创建:

mkdir -p /data/zt/jitor/data/result

cora.pkl 为 pickle 格式,包含以下字段:

字段 类型 说明
x numpy array 节点特征矩阵
y numpy array 节点标签,测试集标签可能为 -1
edge_index numpy array COO 格式边索引,形状为 [2, num_edges]
train_mask numpy bool array 训练集节点掩码
val_mask numpy bool array 验证集节点掩码
test_mask numpy bool array 测试集节点掩码
num_classes int 类别数
num_features int 输入特征维度

数据集原始文件不应提交到仓库。

训练

在项目根目录运行:

python gcn.py

脚本会自动完成以下流程:

  • 加载 cora.pkl
  • 对节点特征做按行归一化
  • 对图边做 GCN 归一化,并转换为 CSC/CSR 稀疏格式
  • 训练两层 GCN 模型
  • 每 20 个 epoch 打印训练集准确率和当前最优验证集准确率

当前主要训练参数:

参数 当前值
随机种子 42
训练轮数 199
隐藏层维度 512
Dropout 0.7
学习率 0.005
Weight decay 5e-4

评估/推理

训练完成后,脚本会使用训练后的模型对所有节点做推理,并根据 test_mask 导出测试集节点预测结果。

输出文件路径:

/data/zt/jitor/data/result/result.json

输出格式为 JSON 字典:

{
  "1708": 3,
  "1709": 1
}

其中 key 为测试集节点编号,value 为预测类别编号。

结果说明

脚本使用准确率作为评价指标:

accuracy = 正确预测节点数 / 参与评估节点数

训练过程中打印的 Train Acc 为训练集准确率,Val Acc 为验证集准确率。最终线上结果以提交的 result.json 为准。由于随机初始化、运行环境和 CUDA 算子差异,复现实验结果可能存在轻微波动。

可复现性说明

代码中通过以下语句固定随机种子:

jt.misc.set_global_seed(42)

为了复现结果,请保持相同的数据文件、依赖版本、随机种子、训练参数和运行环境。

文件说明

easyGnn/
├── gcn.py        # 训练、验证和测试集预测导出入口
├── README.md     # 项目说明文档
└── .gitignore    # Git 忽略规则
关于
32.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号