これは、グラフニューラルネットワークのボトルネックとその実用的な意味(ICLR'2021)の公式の実装です。
ウリ・アロンとエラン・ヤハヴによる。 [ビデオ]、[ポスター]、[スライド]も参照してください。
このリポジトリは、3つのサブプロジェクトに分かれています。
tf-gnn-samples
Brockschmidt(ICML'2020)によるhttps://github.com/microsoft/tf-gnn-samplesのクローンです。このプロジェクトは、論文のセクション4.2および4.2のQM9およびVarmisuse実験を再現するために使用できます。このサブプロジェクトは、Tensorflow 1.13に依存します。クローンの指示は元のコードと同じですが、実験(QM9データセットとVarmisuse)を再現することは、スクリプトtf-gnn-samples/run_qm9_benchs_fa.py
またはtf-gnn-samples/run_varmisuse_benchs_fa.py
元のスクリプトの代わりにtf-gnn-samples/run_varmisuse_benchs_fa.py
。追加の依存関係と指示については、元のreadme:https://github.com/microsoft/tf-gnn-samples/blob/master/readme.mdを参照してください。実行した主な変更は、最後のGNNレイヤーとして完全に隣接する層を使用することであり、論文で説明します。gnn-comparison
https://github.com/diningphil/gnn-comparisonのクローンです。 (ICLR'2020)。このプロジェクトは、生物学的実験を再現するために使用できます(セクション4.3、酵素およびNCI1データセット)。このサブプロジェクトは、Pytorch 1.4およびPytorch幾何学に依存します。追加の依存関係と手順については、元のreadme:https://github.com/diningphil/gnn-comparison/blob/master/readme.mdを参照してください。クローンの指示は同じですが、すべてのconfig_*.yml
ファイルに追加のフラグを追加し、 last_layer_fa
と呼ばれ、デフォルトでTrue
設定され、実験を再現します。実行した主な変更は、最後のGNNレイヤーとして完全に隣接する層を使用することです。このプロジェクトは、新しいGNNアーキテクチャと過度のスケッシング問題のための新しいソリューションの実験に役立つように設計されました。
ご質問があれば、お気軽にお問い合わせください。
このプロジェクトは、Pytorch 1.4.0とPytorch Geometric Libraryに基づいています。
pip install -r requirements.txt
requirements.txt
ファイルには、追加の要件がリストされています。ただし、Pytorch Geometricには手動でインストールが必要になる場合があるため、 requirements.txt
ファイルは後にのみ使用することをお勧めします。
依存関係のインポートがエラーなしで行われることを確認します。
python -c 'import torch; import torch_geometric'
大きな木(深さ= 8)でのトレーニングには、約60GBのRAMと約10GBのGPUメモリが必要になる場合があります。 GPUメモリは、より小さなバッチサイズを使用して--accum_grad
フラグを使用することで損なう可能性があります。
たとえば、実行する代わりに:
python main.py --batch_size 1024 --type GGNN
以下は勾配蓄積を使用し、GPUメモリを少なくします。
python main.py --batch_size 512 --accum_grad 2 --type GGNN
紙から単一の実験を実行するには、実行してください。
python main.py --help
利用可能なフラグをご覧ください。たとえば、深さ= 4でGGNNをトレーニングするには、実行します。
python main.py --task DICTIONARY --eval_every 1000 --depth 4 --num_layers 5 --batch_size 1024 --type GGNN
すべての深さでGNNを訓練するには、次のいずれかを実行します。
python run-gcn-2-8.py
python run-gat-2-8.py
python run-ggnn-2-8.py
python run-gin-2-8.py
上記のスクリプトを実行した結果は(論文のセクション4.1)です。
R: | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
ggnn | 1.0 | 1.0 | 1.0 | 0.60 | 0.38 | 0.21 | 0.16 |
ガット | 1.0 | 1.0 | 1.0 | 0.41 | 0.21 | 0.15 | 0.11 |
ジン | 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 |
他のGNNタイプを試すには:
GNN_TYPE
enumに新しいGNNタイプを追加します。たとえば、 MY_NEW_TYPE = auto()
elif self is GNN_TYPE.MY_NEW_TYPE:
新しいgnnタイプオブジェクトをここにインスタンス化するにはmain.py
ファイルのフラグとして使用します。 python main.py --type MY_NEW_TYPE ...
この作品を引用したい場合は、このbibtexエントリを使用してください。
@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}
}