이것은 논문의 공식적인 구현이다 : 그래프 신경망의 병목 현상과 실질적인 영향 (ICLR'2021).
Uri Alon과 Eran Yahav. [비디오], [포스터] 및 [슬라이드]도 참조하십시오.
이 저장소는 세 가지 하위 프로젝트로 나뉩니다.
tf-gnn-samples
Brockschmidt (ICML'2020)의 https://github.com/microsoft/tf-gnn-samples의 클론입니다. 이 프로젝트는 논문에서 섹션 4.2 및 4.2의 QM9 및 Varmisuse 실험을 재현하는 데 사용될 수 있습니다. 이 하위 프로젝트는 텐서 플로 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
은 Errica et al. (ICLR'2020). 이 프로젝트는 생물학적 실험 (4.3 절, 효소 및 NCI1 데이터 세트)을 재현하는 데 사용될 수 있습니다. 이 하위 프로젝트는 Pytorch 1.4 및 Pytorch-Geometric에 따라 다릅니다. 추가 종속성 및 지침은 원래의 readme (https://github.com/diningphil/gnn-comparison/blob/master/readme.md)을 참조하십시오. 클론에 대한 지침은 기본적으로 True
로 설정된 last_layer_fa
라는 모든 구성 config_*.yml
파일에 추가 플래그를 추가하고 실험을 재현한다는 점을 제외하고는 동일합니다. 우리가 수행 한 주요 수정은 마지막 GNN 층으로 완전히 차단 된 층을 사용하는 것입니다.이 프로젝트는 새로운 GNN 아키텍처 및 과잉 속성 문제에 대한 새로운 솔루션을 실험하는 데 유용하도록 설계되었습니다.
질문이 있으시면 언제든지 문제를여십시오.
이 프로젝트는 Pytorch 1.4.0 및 Pytorch 기하학적 라이브러리를 기반으로합니다.
pip install -r requirements.txt
requirements.txt
파일에는 추가 요구 사항이 나와 있습니다. 그러나 Pytorch Geometric은 수동 설치가 필요할 수 있으므로 요구 사항을 사용하는 것이 좋습니다 requirements.txt
파일 만 사용하는 것이 좋습니다.
종속성을 가져 오는 것이 오류가 없는지 확인하십시오.
python -c 'import torch; import torch_geometric'
큰 나무에 대한 훈련 (깊이 = 8)에는 ~ 60GB의 RAM과 약 10GB의 GPU 메모리가 필요할 수 있습니다. 더 작은 배치 크기를 사용하고 --accum_grad
플래그를 사용하여 GPU 메모리를 손상시킬 수 있습니다.
예를 들어, 실행하는 대신 :
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 절)입니다.
아르 자형: | 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 유형을 실험하려면 :
MY_NEW_TYPE = auto()
와 같은 새 GNN 유형을 GNN_TYPE
enum에 추가하십시오.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}
}