reproduce GNN model: GIN (XU et al. 2019)
通过复现《How powerful are graph neural networks?》这篇论文,熟悉图分类常用数据集。必须注意到cora, citeseer和pubmed这三个数据集不是用于graph分类的,而是用于node分类的。
GNN常用的公开数据集大致有分子、蛋白质、论文引用网络、社交网络等这几类。
官方代码地址
本人复现代码地址
常用图数据集
吐槽:为什么每个很牛的模型,开源的数据预处理代码写得都和翔一样?
吐槽:编写图神经网络模型,我感觉构造coo格式的稀疏矩阵才是最头疼的
- IMDB数据集:每个节点代表一个演员,每条边代表两个演员是否出现在同一个电影里。IMDB-BINARY类别有两个:爱情片和动作片(???)如果同时是爱情片和动作片的话,就会归类为动作片。IMDB-MULTI则在爱情片和动作片的基础上,加了一个科幻片类别。
- COLLAB数据集:每个节点代表一个researcher,每个graph我猜是代表了一个科研团体?每一个Graph有一个类别,共有高能物理、凝聚态物理和天体物理3个类别。
- Reddit数据集:每个节点代表一个用户,每个graph代表一个帖子,帖子里如果一个用户回复了另一个用户的评论就构成一条边。graph的类别代表了帖子类型。Reddit-Binary、Reddit5K、Reddit12K分别有2类、2类和11类。
- MUTAG数据集:每个graph代表一个硝基化合物分子,有两个类别,代表这个分子是诱变芳香族或杂芳香族。
- PTC数据集:也是分子化合物,和上述一样
- NCI1数据集:也是分子化合物,和上述一样
- Protein数据集:每个节点是一个secondary structure elements,如果两个节点在氨基酸序列或3D空间中是相邻节点就会存在一条边。 总结如下表
数据集 | 图数量 | 图类别数 | 图平均节点 | 节点标签数 |
---|---|---|---|---|
IMDB-binary | 1000 | 2 | 19.77 | 0 |
IMDB-multi | 1500 | 3 | 13 | 0 |
COLLAB | 5000 | 3 | 74.49 | 0 |
Reddit-Binary | 2000 | 2 | 429.61 | 0 |
Reddit-multi-5K | 5000 | 2 | 508.5 | 0 |
Reddit-multi-12K | 11929 | 11 | 391.4 | 0 |
MUTAG | 188 | 2 | 17.9 | 7 |
PTC | 344 | 2 | 25.5 | 19 |
NCI1 | 4110 | 2 | 29.8 | 37 |
Protein | 1113 | 2 | 39.1 | 3 |
论文给的结果如下图,这个结果好像是跑了10 folds,把test set的ACC取平均的结果。精力有限,我只跑了一个fold。官方的GIN模型code有个细节,就是参考了Xu et al. 2018提出的JKNet,使用了Layer Aggregator。每一层的输出,都经过一个Linear层,再求和,作为最后的输出。
我复现的结果见以下7张图。模型设置:neighbor aggregator和graph aggregator都使用sumPool,没加epsilon参数(也就是论文的GIN0,而不是GIN-eps)。由于资源有限,Reddit数据集跑起来OOM了,就不跑Reddit的了。
如图所示,Test Accuracy在某个Epoch都刚好达到了文中给的结果,NCI1数据集除外,我也不知道为什么。