Skip to content

论文复现指南 GNN in GammaGL

Guangyu Zhou edited this page May 6, 2024 · 2 revisions

论文复现指南

推荐学习路线和内容

  • 第一周 了解TensorlayerX
    • 了解框架 TensorLayerX(只需要了解基本的即可,无需知道每一个API作用)。重要API:
      • API-Activations: ReLU(), Softmax()
      • API-Metrics: 全部
      • API-NN: Linear(), Dropout(), Reshape(), Concat(), Transpose()
      • API-Model Training: WithLoss(), TrainOneStep()
      • API-Initializers: Zeros(), Ones(), Constant(), RandomNormal(), XavierNormal()(注意:RandomUniform()有bug,非必要,不要使用)
      • API-Operations: get_tensor_shape(), zeros(), ones(), random_normal(), xavier_normal(), abs(), argmax(), ceil(), cumsum(), exp(), l2_normalize(), multiply(), reshape(), concat(), convert_to_tensor(), convert_to_numpy(), reduce_XXX(), logical_XXX(), matmul(), stack(), expand_dims(), gather(), tensor_scatter_nd_update(), scatter_update(), diag(), mask_select(), set_device(), to_device()
      • API-Optimizers: Adam(), SGD()
  • 第二周 阅读论文及源码
    • 阅读论文,了解论文的大致内容(摘要、背景、拟解决的问题和大致思路等)。
    • 对照论文的源代码,将论文的公式和代码的内容对应。
      • 汇报内容主要包含Preliminary、Related work、Motivation、Method、Experiment;
      • 能够根据模型架构图,描述模型的处理过程;
      • 汇报时间不要超过半个小时。
    • 准备论文汇报PPT。
  • 第三周 了解GammaGL
    • 安装GammaGL:参考主页,或文档
    • 数据集集成:
      • 了解GammaGL集成数据集方法,参考plaintoid数据集。
    • 卷积层 gammagl/layers/conv的实现:
      • 了解MessgaePassing类:
        • message: 消息发送函数,执行根据edge_index和edge_weight将x中的消息发送到边上的操作。通常需要在继承类中重写,以实现不同的实例。
        • aggregate: 消息传播函数,执行根据edge_index将msg中包含的消息聚合到目标节点上的操作。可以需根据需要设置aggr_type [sum(default), mean, max, min],也可以根据需要重写。
        • update: 消息更新函数,该函数通常在需要残差链接等特殊更新方式时候使用,也可以不使用该函数直接在forward过程中实现。
        • propagate: 描述的消息传播过程,上述函数会被依次执行。 注意:消息传播过程在概念上来讲不包含神经网络中的参数,有关线性变换的部分计算一般在forward中执行。
      • 了解卷积类实现,参考GCNConvGATConv
    • 模型的实现:
      • 了解GammaGL模型实现,可对比DGL、PyG对应模型的实现,参考GCNModel
    • 训练流程:
  • 后续
    • 根据论文和源代码,在GammaGL上使用TensorLayerX进行模型复现;
    • 运行实验,要求模型的性能基本达到论文性能;
    • 撰写模型文档,包括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:提交模型之前通过命令更新tensorlayerx和gammagl的代码,测试通过之后提交pr;
  • step 2:建议使用可视化软件使用git,如sourcetree,github desktop,vscode插件等,有关git的原理和操作参考官方文档
  • step 3:fork 本项目到自己的账号下面;
  • step 4:克隆你账号下面的项目,e.g. git clone github.com/dddg617/GammaGL
  • step 5:在本地新建分支,如gcn,命令为git checkout -b gcn
    • 注意:不建议将代码提交到自己仓库main分支,因为合并代码之后,无法再用此分支提交代码。
  • step 6:编写代码,并向新建分支提交commit,参考命令:
    • git status: 查看仓库修改情况。
    • git add XXX: 添加要修改的文件。
    • git commit -m "XXX":提交文件,附上提交说明。
  • step 7:把更改的代码push到自己仓库,自己建立的分支下,e.g. git push origin gcn
  • step 8:在github上提交pr到BUPT-GAMMA/GammaGL的main分支;
  • step 9:根据负责人以及comment的意见,修改代码;
    • 注意:修改代码只需要在自己仓库的分支上commit、push(即重复step 6-step 7)即可,无需关闭pr再重新打开。
  • step 10:项目管理人员合并代码。