目录

计图挑战赛赛道一热身赛一:基于引用网络的论文分类

本仓库为第六届“计图”人工智能算法挑战赛赛道一热身赛一的开源代码。任务是在 Cora 引文网络数据集上使用 Jittor 和 JittorGeometric 训练 GCN(Graph Convolutional Network)模型,并对测试集论文节点进行主题分类。作者李同轩,学号25120324,来自北京交通大学计算机科学与技术学院计算机科学与技术专业研一。

1. 环境安装

1.1 运行环境

  • Python 3.11
  • Jittor 1.3.11.0
  • jittor_geometric 2.0.0
  • numpy 1.26.4
  • scikit-learn 1.7.1
  • CUDA GPU:NVIDIA GeForce RTX 3090

1.2 安装命令

建议使用 conda 创建独立环境:

conda create -n gcn python=3.11 -y
conda activate gcn
pip install -r requirements.txt

如果 Jittor 在 CUDA/cuDNN 初始化阶段报错,可使用 Jittor 官方安装器安装兼容 CUDA 缓存:

python -m jittor_utils.install_cuda

本项目不依赖本机绝对路径。训练脚本默认从当前目录读取 data/cora.pkl

2. 数据准备

比赛官方提供数据文件 data/cora.pkl。目录结构如下:

.
├── data/
│   └── cora.pkl
├── gcn.py
├── README.md
└── requirements.txt

data/cora.pkl 包含以下字段:

字段 类型 说明
x numpy array, shape (2708, 1433) 节点词袋特征
y numpy array, shape (2708,) 节点标签,测试集标签为 -1
edge_index numpy array, shape (2, num_edges) 图边列表
train_mask numpy bool array, shape (2708,) 训练集掩码
val_mask numpy bool array, shape (2708,) 验证集掩码
test_mask numpy bool array, shape (2708,) 测试集掩码
num_classes int 类别数,值为 7
num_features int 特征维度,值为 1433

数据划分:

  • 训练节点:140
  • 验证节点:500
  • 测试节点:1000

开源仓库中不建议提交原始数据文件;如需复现,请将官方提供的 cora.pkl 放到 data/ 目录下。

3. 训练

运行以下命令即可完成训练:

python gcn.py

训练配置在 gcn.py 中集中设置:

参数 取值
random seed 42
hidden_dim 256
dropout 0.8
optimizer Adam
learning rate 0.01
weight decay 5e-4
epochs 200

代码中使用 jt.misc.set_global_seed(42) 固定随机种子。模型会根据验证集准确率保存最优参数,并使用最优参数生成最终预测。

4. 评测/推理

本热身赛的训练和推理在同一入口脚本中完成:

python gcn.py

脚本执行流程:

  1. 读取 data/cora.pkl
  2. 对节点特征做行归一化。
  3. 使用 gcn_norm 对图结构归一化并添加自环。
  4. 将 COO 边格式转换为 CSC 和 CSR 稀疏格式。
  5. 训练两层 GCN 模型。
  6. 在验证集上记录最优模型。
  7. 对测试集节点生成预测并保存为 result.json

输出文件格式:

{
  "1": 3,
  "2": 6,
  "6": 5
}

其中 key 为测试集节点编号字符串,value 为预测类别整数,类别范围为 0-6

5. 结果说明

评测指标为 Accuracy:

Accuracy = 预测正确的测试节点数 / 测试节点总数

本地验证集最优结果:

Val Acc: 0.8080

result.json 共包含 1000 个测试节点预测。线上成绩由比赛平台使用隐藏测试标签计算,可能与本地验证集准确率存在差异,原因是本地只能使用验证集标签评估,测试集标签在数据中被置为 -1

6. 模型方法

模型采用两层 GCN:

GCNConv(num_features, 256) -> ReLU -> Dropout -> GCNConv(256, num_classes)

训练损失为交叉熵损失:

loss = cross_entropy(logits[train_mask], y[train_mask])

优化器为 Adam,权重衰减为 5e-4

7. 复现与提交

重新生成预测文件:

python gcn.py

重新生成提交压缩包:

zip -j result.zip gcn.py result.json

检查压缩包内容:

unzip -l result.zip

压缩包应只包含:

result.zip
├── gcn.py
└── result.json

8. 代码规范说明

  • 文件和变量命名采用 snake_case
  • 模型类 GCNNet 使用 PascalCase
  • Python 缩进为 4 空格。
  • 训练脚本不依赖本机绝对路径。
  • .gitignore 默认忽略日志、缓存、模型权重、数据大文件和输出目录。

9. 第三方引用与声明

  • 深度学习框架:Jittor。
  • 图神经网络库:JittorGeometric。
  • GCN 层实现基于 JittorGeometric 的 GCNConv
  • 数据集:比赛官方提供的 Cora 引文网络数据集。

本项目代码基于比赛官方热身赛模板补全,用于计图挑战赛学习与提交。

关于
34.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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