目录

赛道一热身赛:基于 GCN 的 Cora 节点分类

本项目为计图比赛赛道一热身赛提交代码,基于 JittorJittorGeometric 实现两层图卷积网络(Graph Convolutional Network,GCN),用于完成 Cora 数据集上的半监督节点分类任务。

代码包含数据加载、特征归一化、图结构预处理、模型训练、验证集评测以及测试集预测。运行结束后会在项目根目录生成提交文件 result.json

1. 项目结构

.
├── README.md
├── gcn.py
├── result.json
└── data/
    └── cora.pkl

各文件说明如下:

  • gcn.py:GCN 模型、训练、验证和预测代码。
  • result.json:测试集节点分类结果。
  • data/cora.pkl:比赛提供的 Cora 数据文件,不包含在开源仓库中。

2. 环境安装

2.1 环境要求

  • Python 3.8 及以上
  • Jittor
  • JittorGeometric
  • NumPy
  • CUDA 与 NVIDIA GPU(代码默认启用 GPU)

2.2 安装命令

安装 Jittor 和基础依赖:

python -m pip install --upgrade pip
python -m pip install numpy jittor

安装 JittorGeometric:

git clone https://github.com/AlgRUC/JittorGeometric.git
cd JittorGeometric
python -m pip install .
cd ..

3. 数据准备

将比赛提供的 cora.pkl 放入项目根目录下的 data/ 文件夹:

data/
└── cora.pkl

程序默认从以下路径读取数据:

data/cora.pkl

cora.pkl 包含以下字段:

字段 类型或形状 说明
x (2708, 1433) 节点特征矩阵
y (2708,) 节点标签,测试集节点标签为 -1
edge_index (2, num_edges) 图的边索引
train_mask (2708,) 训练集节点掩码
val_mask (2708,) 验证集节点掩码
test_mask (2708,) 测试集节点掩码
num_classes int 类别数,取值为 7
num_features int 节点特征维度,取值为 1433

4. 模型说明

本项目采用两层 GCN,模型结构如下:

节点特征
  ↓
GCNConv(1433, 256)
  ↓
ReLU
  ↓
Dropout(0.8)
  ↓
GCNConv(256, 7)
  ↓
节点类别预测

主要处理流程如下:

  1. 对节点特征进行行归一化。
  2. 为图加入自环并进行 GCN 归一化。
  3. 将 COO 格式的图结构转换为 CSC 和 CSR 稀疏格式。
  4. 使用两层 GCN 提取节点表示并输出分类结果。
  5. 在训练集节点上计算交叉熵损失并更新模型参数。

5. 训练配置

参数 设置
随机种子 42
隐藏层维度 256
Dropout 0.8
学习率 0.01
权重衰减 5e-4
优化器 Adam
损失函数 Cross Entropy
训练轮数 200
自环 启用

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

jt.misc.set_global_seed(42)

6. 训练

在项目根目录执行:

python gcn.py

程序每 20 轮输出一次训练集准确率和当前最佳验证集准确率:

Epoch: 020, Train Acc: 0.xxxx, Val Acc: 0.xxxx

训练完成后,程序会输出最佳验证集准确率。

7. 评测与推理

训练、验证和测试集推理均集成在 gcn.py 中,执行以下命令即可完成全部流程:

python gcn.py

验证集评价指标为分类准确率:

Accuracy = 预测正确的节点数 / 验证集节点总数

测试集没有公开标签。程序完成训练后,会对 test_mask 对应的节点进行预测,并生成 result.json

本项目不依赖外部 checkpoint,预测结果由当前训练流程结束后的模型直接生成。

8. 结果说明

仓库中的 result.json 为本代码运行后生成的测试集预测结果,共包含 1000 个测试节点,预测类别范围为 06

文件格式如下:

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

其中:

  • JSON 键表示测试节点编号。
  • JSON 值表示模型预测的节点类别。

线上最终成绩以比赛评测平台对 result.json 的评测结果为准。

9. 第三方依赖声明

本项目使用以下开源框架:

  • Jittor
  • JittorGeometric

GCN 卷积、图归一化以及稀疏图格式转换等功能由 JittorGeometric 提供。本项目未使用预训练模型或预训练权重。

关于

计图挑战赛赛道一热身赛

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

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