Esta es la implementación oficial del documento: en el cuello de botella de las redes neuronales gráficas y sus implicaciones prácticas (ICLR'2021), que introduce el problema excesivo de GNN.
Por Uri Alon y Eran Yahav. Vea también el [Video], [Póster] y [Diapositivas].
Este repositorio se divide en tres subproyectos:
tf-gnn-samples
es un clon de https://github.com/microsoft/tf-gnn-samples de Brockschmidt (ICML'2020). Este proyecto se puede utilizar para reproducir los experimentos QM9 y Varmisuse de la Sección 4.2 y 4.2 en el documento. Este subproyecto depende de TensorFlow 1.13. Las instrucciones para nuestro clon son las mismas que su código original, excepto que la reproducción de nuestros experimentos (el conjunto de datos QM9 y Varmisuse) se pueden realizar ejecutando el script tf-gnn-samples/run_qm9_benchs_fa.py
o tf-gnn-samples/run_varmisuse_benchs_fa.py
en lugar de sus guiones originales. Para dependencias e instrucciones adicionales, consulte su ReadMe original: https://github.com/microsoft/tf-gnn-samples/blob/master/readme.md. La principal modificación que realizamos es usar una capa totalmente adyacente como la última capa de GNN y describimos en nuestro artículo.gnn-comparison
es un clon de https://github.com/diningphil/gnn-comparison de Errica et al. (ICLR'2020). Este proyecto se puede utilizar para reproducir los experimentos biológicos (Sección 4.3, las enzimas y los conjuntos de datos NCI1). Este subproyecto depende de Pytorch 1.4 y Pytorch-geométrico. Para dependencias e instrucciones adicionales, consulte su ReadMe original: https://github.com/diningphil/gnn-comparison/blob/master/readme.md. Las instrucciones para nuestro clon son las mismas, excepto que agregamos un indicador adicional a cada config_*.yml
, llamado last_layer_fa
, que se establece en True
de forma predeterminada, y reproduce nuestros experimentos. La principal modificación que realizamos es usar una capa totalmente adyacente como la última capa GNN.Este proyecto fue diseñado para ser útil para experimentar con nuevas arquitecturas de GNN y nuevas soluciones para el problema excesivo.
No dude en abrir un problema con cualquier pregunta.
Este proyecto se basa en Pytorch 1.4.0 y en la biblioteca geométrica de Pytorch.
pip install -r requirements.txt
El archivo requirements.txt
enumera los requisitos adicionales. Sin embargo, Pytorch Geometric podría requerir una instalación manual y, por lo tanto, recomendamos usar el archivo requirements.txt
solo después.
Verifique que la importación de las dependencias no tenga errores:
python -c 'import torch; import torch_geometric'
El entrenamiento en árboles grandes (profundidad = 8) puede requerir ~ 60 GB de RAM y aproximadamente 10 GB de memoria de GPU. La memoria de GPU puede comprometerse utilizando un tamaño de lote más pequeño y utilizando el indicador --accum_grad
.
Por ejemplo, en lugar de ejecutar:
python main.py --batch_size 1024 --type GGNN
Lo siguiente usa la acumulación de gradiente y toma menos memoria de GPU:
python main.py --batch_size 512 --accum_grad 2 --type GGNN
Para ejecutar un solo experimento del papel, ejecute:
python main.py --help
Y ver las banderas disponibles. Por ejemplo, para entrenar un ggnn con profundidad = 4, ejecutar:
python main.py --task DICTIONARY --eval_every 1000 --depth 4 --num_layers 5 --batch_size 1024 --type GGNN
Para entrenar un GNN en todas las profundidades, ejecute una de las siguientes opciones:
python run-gcn-2-8.py
python run-gat-2-8.py
python run-ggnn-2-8.py
python run-gin-2-8.py
Los resultados de ejecutar los scripts anteriores son (sección 4.1 en el documento):
R: | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
Ggnn | 1.0 | 1.0 | 1.0 | 0.60 | 0.38 | 0.21 | 0.16 |
REVÓLVER | 1.0 | 1.0 | 1.0 | 0.41 | 0.21 | 0.15 | 0.11 |
GINEBRA | 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 |
Para experimentar con otros tipos de GNN:
GNN_TYPE
aquí, por ejemplo: MY_NEW_TYPE = auto()
elif self is GNN_TYPE.MY_NEW_TYPE:
para instanciar el nuevo objeto de tipo GNN aquímain.py
: python main.py --type MY_NEW_TYPE ...
Si desea citar este trabajo, use esta entrada de 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}
}