Dies ist die offizielle Implementierung des Papiers: Auf dem Engpass der neuronalen Netzwerke von Graphen und seinen praktischen Auswirkungen (ICLR'2021), das das überquadierende Problem von GNNs einführt.
Von Uri Alon und Eran Yahav. Siehe auch die [Video], [Poster] und [Folien].
Dieses Repository ist in drei Unterprojekte unterteilt:
tf-gnn-samples
ist ein Klon von https://github.com/microsoft/tf-nn-amples von brockschmidt (ICML'2020). Dieses Projekt kann verwendet werden, um die QM9- und Varmisuse -Experimente von Abschnitt 4.2 und 4.2 im Papier zu reproduzieren. Dieses Unterprojekt hängt vom TensorFlow 1.13 ab. Die Anweisungen für unseren Klon entsprechen dem ursprünglichen Code, außer dass die Reproduktion unserer Experimente (QM9-Datensatz und Varmisuse) durch Ausführen des Skripts tf-gnn-samples/run_qm9_benchs_fa.py
oder tf-gnn-samples/run_varmisuse_benchs_fa.py
anstelle ihrer ursprünglichen Skripte. Weitere Abhängigkeiten und Anweisungen finden Sie in der ursprünglichen Readme: https://github.com/microsoft/tf-nn--amples/blob/master/readme.md. Die Hauptmodifikation, die wir durchgeführt haben, ist die Verwendung einer vollwertigen Schicht als letzte GNN-Schicht, und wir beschreiben in unserem Artikel.gnn-comparison
ist ein Klon von https://github.com/diningphil/gnn-comparison von Errica et al. (ICLR'2020). Dieses Projekt kann verwendet werden, um die biologischen Experimente zu reproduzieren (Abschnitt 4.3, Enzyme und NCI1 -Datensätze). Dieses Unterprojekt hängt von Pytorch 1.4 und Pytorch-Geometric ab. Weitere Abhängigkeiten und Anweisungen finden Sie in ihrem ursprünglichen Readme: https://github.com/diningphil/gnn-comparison/blob/master/readme.md. Die Anweisungen für unseren Klon sind gleich, außer dass wir jeder config_*.yml
-Datei namens last_layer_fa
, die standardmäßig auf True
eingestellt ist und unsere Experimente reproduziert. Die Hauptmodifikation, die wir durchgeführt haben, ist die Verwendung einer vollständig adjazenten Schicht als letzte GNN-Schicht.Dieses Projekt wurde so konzipiert, dass sie beim Experimentieren mit neuen GNN-Architekturen und neuen Lösungen für das überquadratische Problem nützlich sein sollten.
Fühlen Sie sich frei, ein Problem mit Fragen zu eröffnen.
Dieses Projekt basiert auf Pytorch 1.4.0 und der geometrischen Pytorch -Bibliothek.
pip install -r requirements.txt
In der requirements.txt
-Datei werden die zusätzlichen Anforderungen aufgeführt. Pytorch Geometric kann jedoch eine manuelle Installation erfordern, und wir empfehlen daher, die Datei der requirements.txt
erst später zu verwenden.
Stellen Sie sicher, dass das Import der Abhängigkeiten ohne Fehler besteht:
python -c 'import torch; import torch_geometric'
Das Training auf großen Bäumen (Tiefe = 8) kann ~ 60 GB RAM und etwa 10 GB GPU -Speicher erfordern. Der GPU -Speicher kann durch die Verwendung einer kleineren Stapelgröße und des Flags --accum_grad
beeinträchtigt werden.
Zum Beispiel anstatt zu laufen:
python main.py --batch_size 1024 --type GGNN
Im Folgenden wird die Gradientenakkumulation verwendet und weniger GPU -Speicher benötigt:
python main.py --batch_size 512 --accum_grad 2 --type GGNN
Um ein einzelnes Experiment aus dem Papier durchzuführen, rennen Sie:
python main.py --help
Und sehen Sie die verfügbaren Flaggen. Zum Beispiel ein GGNN mit Tiefe = 4 trainieren, rennen Sie:
python main.py --task DICTIONARY --eval_every 1000 --depth 4 --num_layers 5 --batch_size 1024 --type GGNN
Um einen GNN über alle Tiefen zu trainieren, führen Sie eine der folgenden:
python run-gcn-2-8.py
python run-gat-2-8.py
python run-ggnn-2-8.py
python run-gin-2-8.py
Die Ergebnisse des Ausführens der oben genannten Skripte sind (Abschnitt 4.1 im Papier):
R: | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
Ggnn | 1.0 | 1.0 | 1.0 | 0,60 | 0,38 | 0,21 | 0,16 |
Gat | 1.0 | 1.0 | 1.0 | 0,41 | 0,21 | 0,15 | 0,11 |
GIN | 1.0 | 1.0 | 0,77 | 0,29 | 0,20 | ||
Gcn | 1.0 | 1.0 | 0,70 | 0,19 | 0,14 | 0,09 | 0,08 |
Experimentieren mit anderen GNN -Typen:
GNN_TYPE
-Enum hinzu, zum Beispiel: MY_NEW_TYPE = auto()
elif self is GNN_TYPE.MY_NEW_TYPE:
So instanziieren Sie das neue GNN -Typ -Objekt hiermain.py
-Datei: python main.py --type MY_NEW_TYPE ...
Wenn Sie diese Arbeit zitieren möchten, verwenden Sie bitte diesen Bibtex -Eintrag:
@inproceedings{
alon2021on,
title={On the Bottleneck of Graph Neural Networks and its Practical Implications},
author={Uri Alon and Eran Yahav},
booktitle={International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=i80OPhOCVH2}
}