Skip to content

OpenHGNN模型复现指南

Ying-1106 edited this page May 9, 2024 · 1 revision

OpenHGNN模型复现流程

推荐学习路线和内容

  • 第一周:学习异质图消息传递原理

    • 学习DGL中SAGE,GCN,GAT三种层的实现方式,DGL中的GNN层可以通用于DGLgraph, Block ,Bipartite graph。而异质图是由多个二分图组成,因此这三种层可以用于后续的异质图消息传递过程。可以根据B站视频来学习GCN、SAGE、GAT的原理以及代码。
    • 了解DGL异质图的保存方式和消息传递过程:
      • 异质图由多个二分图组成,每个规范边(canonical etype)对应一个二分图。
      • 访问图中数据:g.ndata,g.edata, g.num_nodes, g.num_edges, g.canonical_etypes
      • 了解异质图message passing机制,通过学习HeteroGraphConv类了解如何完成异质图消息聚合。
    • 创建一个简单的异质图,通过HeteroGraphConv层完成一次异质图消息传递
  • 第二周:了解OpenHGNN的pipeline,可以参考算法库中实现的RGCN模型进行学习

    • Task
      • .Dataset:包含一个异质图对象 g (DGLgraph形式,存储了节点/边特征), category, num_classes。task中还包括标签信息(labels)
      • Evaluation Metric,衡量模型的预测值和真实值之间的差异,反映模型性能
      • Training Loss:以数值形式衡量模型预测值和真实值之间的差异,可微分,以此来求梯度,更新参数
      • Train-Valid-Test Split:训练集/验证集/测试集的划分,了解异质图节点分类任务下的train_idx\val_idx\test_idx。
      • 主要函数:get_graph(),get_loss_fn(),evaluate(),get_split(),get_labels()
    • Model
      • mode功能概述:输入数据,得到预测输出。
      • model初始化:build_from_args(cls,args,hg)和模型初始化函数之间的关系
      • model.forward:输入异质图hg和全部节点特征feat,输出为各类型节点更新后的特征。
    • Trainer_flow(node_classification_flow):
      • 初始化函数:构造task,异质图hg, patience(提前停止相关的参数), max_epoch,loss_fn
      • preprocess函数:给模型加入一个input_feature层,用于形成初始特征。
    • Trainer_flow(base_flow):
      • 初始化函数:执行base_flow的初始化函数,category,num_classes,out_node_type。构造model,optimizer
      • train函数:首先preprocess加入一个特征初始化层,之后就开始for循环进行多轮迭代,每一轮都会将全部数据集在模型中forward一遍,计算出训练集Loss并以此更新参数,并且同时在训练集、验证集、测试集上计算Loss和Metric。
      • full_train_step函数:模型forward一次,计算出train_loss,以此更新模型参数
      • full_test_step:模型forward一次,同时计算出训练集/验证集/测试集 上的loss和metric
  • 第3周及以后:

    • 阅读论文,了解论文的大致内容(摘要、背景、拟解决的问题和大致思路等)。
    • 对照论文的源代码,将论文的公式和代码的内容对应。
    • 准备论文汇报PPT:
      • 汇报内容主要包含Preliminary、Related work、Motivation、Method、Experiment;
      • 能够根据模型架构图,描述模型的处理过程;
      • 汇报时间不要超过半个小时。
    • 根据论文和源代码,在OpenHGNN上基于DGL进行模型复现,要求尽可能基于已有的trainer_flow和task进行复用。
    • 运行实验,要求模型的性能基本达到论文性能;
    • 撰写模型文档,包括README文档和docstring文档
    • 常见问题,可以参考常见问题文档

本地搭建文档

  • 首先,需要安装make指令,可参考官网,名称为MinGW;
  • 下载安装之后,需添加环境变量,将/{你的安装目录}/MinGW/bin添加到环境变量中(将mingw32-make.exe更名为make.exe方便一些);
  • 将算法库clone到本地;
  • 根据安装教程,安装算法库以及相应的依赖;
  • 进入docs文件夹下,cd docs;
  • 运行pip install -r requirements.txt,安装文档库的相关依赖;
  • 运行sh build.sh;
  • 正常可以在http://127.0.0.1:8000/上查看自己的文档结果。

代码提交指南

在负责人同意的情况下,便可在github上提交pull request (pr),详细如下:

  • step 1:提交模型之前通过git命令更新OpenHGNN的代码;
  • step 2:建议使用可视化软件使用git,如sourcetree,github desktop,vscode插件等,有关git的原理和操作参考官方文档
  • step 3:fork 本项目到自己的账号下面;
  • step 4:克隆你账号下面的项目到本地主机;
  • step 5:在本地新建分支,如gcn,命令为git checkout -b hgcn;
    • 注意:不建议将代码提交到自己仓库的main分支,因为合并代码之后,无法再用此分支提交代码。
  • step 6:编写代码,并向新建分支提交commit,参考命令:
    • git status: 查看仓库修改情况。
    • git add XXX: 添加要修改的文件。
    • git commit -m "XXX":提交文件,附上提交说明。
  • step 7:把更改的代码push到自己仓库,自己建立的分支下,e.g. git push origin hgcn;
  • step 8:在github上提交pr到BUPT-GAMMA/OpenHGNN的main分支;
  • step 9:根据负责人以及comment的意见,修改代码;
    • 注意:修改代码只需要在自己仓库的分支上commit、push(即重复step 6-step 7)即可,无需关闭pr再重新打开。
  • step 10:项目管理人员合并代码。
Clone this wiki locally