You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mindspore/model_zoo/official/gnn/gcn/README_CN.md

7.3 KiB

目录

图卷积网络描述

图卷积网络GCN于2016年提出旨在对图结构数据进行半监督学习。它提出了一种基于卷积神经网络有效变体的可扩展方法可直接在图上操作。该模型在图边缘的数量上线性缩放并学习隐藏层表示这些表示编码了局部图结构和节点特征。

论文: Thomas N. Kipf, Max Welling.2016.Semi-Supervised Classification with Graph Convolutional Networks.In ICLR 2016.

模型架构

GCN包含两个图卷积层。每一层以节点特征和邻接矩阵为输入通过聚合相邻特征来更新节点特征。

数据集

数据集 类型 节点 特征 标签率
Cora Citation network 2708 5429 7 1433 0.052
Citeseer Citation network 3327 4732 6 3703 0.036

环境要求

  • 硬件Ascend处理器
    • 准备Ascend或GPU处理器搭建硬件环境。如需试用昇腾处理器请发送申请表至ascend@huawei审核通过即可获得资源。
  • 框架
  • 如需查看详情,请参见如下资源:

快速入门

  • 安装MindSpore

  • 从github下载/kimiyoung/planetoid提供的数据集Cora或Citeseer

  • 将数据集放到任意路径文件夹应该包含如下文件以Cora数据集为例

.
└─data
    ├─ind.cora.allx
    ├─ind.cora.ally
    ├─ind.cora.graph
    ├─ind.cora.test.index
    ├─ind.cora.tx
    ├─ind.cora.ty
    ├─ind.cora.x
    └─ind.cora.y
  • 为Cora或Citeseer生成MindRecord格式的数据集

用法

cd ./scripts
# SRC_PATH为下载的数据集文件路径DATASET_NAME为Cora或Citeseer
sh run_process_data.sh [SRC_PATH] [DATASET_NAME]

启动

# 为Cora生成MindRecord格式的数据集
sh run_process_data.sh ./data cora
# 为Citeseer生成MindRecord格式的数据集
sh run_process_data.sh ./data citeseer

脚本说明

脚本及样例代码

.
└─gcn
  ├─README.md
  ├─scripts
  | ├─run_process_data.sh  # 生成MindRecord格式的数据集
  | └─run_train.sh         # 启动训练目前只支持Ascend后端
  |
  ├─src
  | ├─config.py            # 参数配置
  | ├─dataset.py           # 数据预处理
  | ├─gcn.py               # GCN骨干
  | └─metrics.py           # 损失和准确率
  |
  └─train.py               # 训练网络,每个训练轮次后评估验证结果收敛后,训练停止,然后进行测试。

脚本参数

训练参数可以在config.py中配置。

"learning_rate": 0.01,            # 学习率
"epochs": 200,                    # 训练轮次
"hidden1": 16,                    # 第一图卷积层隐藏大小
"dropout": 0.5,                   # 第一图卷积层dropout率
"weight_decay": 5e-4,             # 第一图卷积层参数的权重衰减
"early_stopping": 10,             # 早停容限

培训、评估、测试过程

用法

# 使用Cora或Citeseer数据集进行训练DATASET_NAME为Cora或Citeseer
sh run_train.sh [DATASET_NAME]

启动

sh run_train.sh cora

结果

训练结果将保存在脚本路径下文件夹名称以“train”开头。您可在日志中找到如下结果

Epoch:0001 train_loss= 1.95373 train_acc= 0.09286 val_loss= 1.95075 val_acc= 0.20200 time= 7.25737
Epoch:0002 train_loss= 1.94812 train_acc= 0.32857 val_loss= 1.94717 val_acc= 0.34000 time= 0.00438
Epoch:0003 train_loss= 1.94249 train_acc= 0.47857 val_loss= 1.94337 val_acc= 0.43000 time= 0.00428
Epoch:0004 train_loss= 1.93550 train_acc= 0.55000 val_loss= 1.93957 val_acc= 0.46400 time= 0.00421
Epoch:0005 train_loss= 1.92617 train_acc= 0.67143 val_loss= 1.93558 val_acc= 0.45400 time= 0.00430
...
Epoch:0196 train_loss= 0.60326 train_acc= 0.97857 val_loss= 1.05155 val_acc= 0.78200 time= 0.00418
Epoch:0197 train_loss= 0.60377 train_acc= 0.97143 val_loss= 1.04940 val_acc= 0.78000 time= 0.00418
Epoch:0198 train_loss= 0.60680 train_acc= 0.95000 val_loss= 1.04847 val_acc= 0.78000 time= 0.00414
Epoch:0199 train_loss= 0.61920 train_acc= 0.96429 val_loss= 1.04797 val_acc= 0.78400 time= 0.00413
Epoch:0200 train_loss= 0.57948 train_acc= 0.96429 val_loss= 1.04753 val_acc= 0.78600 time= 0.00415
Optimization Finished!
Test set results: cost= 1.00983 accuracy= 0.81300 time= 0.39083
...

模型描述

性能

参数 GCN
资源 Ascend 910
上传日期 2020-06-09
MindSpore版本 0.5.0-beta
数据集 Cora/Citeseer
训练参数 epoch=200
优化器 Adam
损失函数 Softmax交叉熵
准确率 81.5/70.3
参数(B) 92160/59344
脚本 https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/gnn/gcn

随机情况说明

以下两种随机情况:

  • 根据入参--seed在train.py中设置种子。
  • 随机失活操作。

train.py已经设置了一些种子避免权重初始化的随机性。若需关闭随机失活将src/config.py中相应的dropout_prob参数设置为0。

ModelZoo主页

请浏览官网主页