86 lines
3.4 KiB
Markdown
86 lines
3.4 KiB
Markdown
Graph Convolutional Networks (GCN)
|
|
============
|
|
|
|
Paper link: [https://arxiv.org/abs/1609.02907](https://arxiv.org/abs/1609.02907)
|
|
Author's code repo: [https://github.com/tkipf/gcn](https://github.com/tkipf/gcn)
|
|
|
|
Dependencies
|
|
------------
|
|
- MXNet nightly build
|
|
- requests
|
|
|
|
``bash
|
|
pip install mxnet --pre
|
|
pip install requests
|
|
``
|
|
|
|
Codes
|
|
-----
|
|
The folder contains three implementations of GCN:
|
|
- `gcn.py` uses DGL's predefined graph convolution module.
|
|
- `gcn_mp.py` uses user-defined message and reduce functions.
|
|
Modify `train.py` to switch between different implementations.
|
|
|
|
The provided implementation in `gcn_concat.py` is a bit different from the
|
|
original paper for better performance, credit to @yifeim and @ZiyueHuang.
|
|
|
|
Results
|
|
-------
|
|
Run with following (available dataset: "cora", "citeseer", "pubmed")
|
|
```bash
|
|
DGLBACKEND=mxnet python3 train.py --dataset cora --gpu 0 --self-loop
|
|
```
|
|
|
|
* cora: ~0.810 (paper: 0.815)
|
|
* citeseer: ~0.702 (paper: 0.703)
|
|
* pubmed: ~0.780 (paper: 0.790)
|
|
|
|
Results (`gcn_concat.py vs. gcn.py`)
|
|
------------------------------------
|
|
`gcn_concat.py` uses concatenation of hidden units to account for multi-hop
|
|
skip-connections. We feel concatenation is superior
|
|
because all neighboring information is presented without additional modeling
|
|
assumptions.
|
|
These results are based on single-run training to minimize the cross-entropy
|
|
loss. We can see clear skip connection can help train a GCN with many layers.
|
|
|
|
The experiments show that adding depth may or may not improve accuracy.
|
|
While adding depth is a clear way to mimic power iterations of matrix factorizations,
|
|
training multiple epochs to obtain stationary points could equivalently solve matrix
|
|
factorization. Given the small datasets, we can't draw such conclusions from these experiments.
|
|
|
|
```
|
|
# Final accuracy 57.70% MLP without GCN
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "citeseer" --n-epochs 200 --n-layers 0
|
|
|
|
# Final accuracy 65.70% with 10-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "citeseer" --n-epochs 200 --n-layers 2 --normalization 'sym' --self-loop
|
|
|
|
# Final accuracy 64.70% with 10-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "citeseer" --n-epochs 200 --n-layers 10 --normalization 'sym' --self-loop
|
|
|
|
```
|
|
|
|
```
|
|
# Final accuracy 53.20% MLP without GCN
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "cora" --n-epochs 200 --n-layers 0
|
|
|
|
# Final accuracy 72.60% with 2-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "cora" --n-epochs 200 --n-layers 2 --normalization 'sym' --self-loop
|
|
|
|
# Final accuracy 78.90% with 10-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "cora" --n-epochs 200 --n-layers 10 --normalization 'sym' --self-loop
|
|
|
|
```
|
|
|
|
```
|
|
# Final accuracy 70.30% MLP without GCN
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "pubmed" --n-epochs 200 --n-layers 0
|
|
|
|
# Final accuracy 78.30% with 2-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "pubmed" --n-epochs 200 --n-layers 2 --normalization 'sym' --self-loop
|
|
|
|
# Final accuracy 76.30% with 10-layer GCN with skip connection
|
|
DGLBACKEND=mxnet python3 examples/mxnet/gcn/gcn_concat.py --dataset "pubmed" --n-epochs 200 --n-layers 10 --normalization 'sym' --self-loop
|
|
```
|