86 lines
2.8 KiB
Markdown
86 lines
2.8 KiB
Markdown
# DGL Implementation of JKNet
|
|
|
|
This DGL example implements the GNN model proposed in the paper [Representation Learning on Graphs with Jumping Knowledge Networks](https://arxiv.org/abs/1806.03536).
|
|
|
|
Contributor: [xnuohz](https://github.com/xnuohz)
|
|
|
|
### Requirements
|
|
The codebase is implemented in Python 3.6. For version requirement of packages, see below.
|
|
|
|
```
|
|
dgl 0.6.0
|
|
scikit-learn 0.24.1
|
|
tqdm 4.56.0
|
|
torch 1.7.1
|
|
```
|
|
|
|
### The graph datasets used in this example
|
|
|
|
###### Node Classification
|
|
|
|
The DGL's built-in Cora, Citeseer datasets. Dataset summary:
|
|
|
|
| Dataset | #Nodes | #Edges | #Feats | #Classes | #Train Nodes | #Val Nodes | #Test Nodes |
|
|
| :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|
|
| Cora | 2,708 | 10,556 | 1,433 | 7(single label) | 60% | 20% | 20% |
|
|
| Citeseer | 3,327 | 9,228 | 3,703 | 6(single label) | 60% | 20% | 20% |
|
|
|
|
### Usage
|
|
|
|
###### Dataset options
|
|
```
|
|
--dataset str The graph dataset name. Default is 'Cora'.
|
|
```
|
|
|
|
###### GPU options
|
|
```
|
|
--gpu int GPU index. Default is -1, using CPU.
|
|
```
|
|
|
|
###### Model options
|
|
```
|
|
--run int Number of running times. Default is 10.
|
|
--epochs int Number of training epochs. Default is 500.
|
|
--lr float Adam optimizer learning rate. Default is 0.01.
|
|
--lamb float L2 regularization coefficient. Default is 0.0005.
|
|
--hid-dim int Hidden layer dimensionalities. Default is 32.
|
|
--num-layers int Number of T. Default is 5.
|
|
--mode str Type of aggregation ['cat', 'max', 'lstm']. Default is 'cat'.
|
|
--dropout float Dropout applied at all layers. Default is 0.5.
|
|
```
|
|
|
|
###### Examples
|
|
|
|
The following commands learn a neural network and predict on the test set.
|
|
Train a JKNet which follows the original hyperparameters on different datasets.
|
|
```bash
|
|
# Cora:
|
|
python main.py --gpu 0 --mode max --num-layers 6
|
|
python main.py --gpu 0 --mode cat --num-layers 6
|
|
python main.py --gpu 0 --mode lstm --num-layers 1
|
|
|
|
# Citeseer:
|
|
python main.py --gpu 0 --dataset Citeseer --mode max --num-layers 1
|
|
python main.py --gpu 0 --dataset Citeseer --mode cat --num-layers 1
|
|
python main.py --gpu 0 --dataset Citeseer --mode lstm --num-layers 2
|
|
```
|
|
|
|
### Performance
|
|
|
|
**As the author does not release the code, we don't have the access to the data splits they used.**
|
|
|
|
###### Node Classification
|
|
|
|
* Cora
|
|
|
|
| | JK-Maxpool | JK-Concat | JK-LSTM |
|
|
| :-: | :-: | :-: | :-: |
|
|
| Metrics(Table 2) | 89.6±0.5 | 89.1±1.1 | 85.8±1.0 |
|
|
| Metrics(DGL) | 86.1±1.5 | 85.1±1.6 | 84.2±1.6 |
|
|
|
|
* Citeseer
|
|
|
|
| | JK-Maxpool | JK-Concat | JK-LSTM |
|
|
| :-: | :-: | :-: | :-: |
|
|
| Metrics(Table 2) | 77.7±0.5 | 78.3±0.8 | 74.7±0.9 |
|
|
| Metrics(DGL) | 70.9±1.9 | 73.0±1.5 | 69.0±1.7 | |