هذا هو التنفيذ الرسمي للورقة: على عنق الزجاجة للشبكات العصبية الرسم البياني وآثارها العملية (ICLR'2021) ، والتي تقدم مشكلة GNNs المفرطة .
بقلم أوري ألون وإيران ياهاف. انظر أيضًا [الفيديو] و [الملصق] و [الشرائح].
ينقسم هذا المستودع إلى ثلاثة مشاريع فرعية:
tf-gnn-samples
Subles الفرعية هي استنساخ من https://github.com/microsoft/tf-gnn-samples by Brockschmidt (ICML'2020). يمكن استخدام هذا المشروع لإعادة إنتاج تجارب QM9 و Varmisuse في القسم 4.2 و 4.2 في الورقة. يعتمد هذا المشروع الفرعي على TensorFlow 1.13. تعتبر تعليمات استنساخنا هي نفس الكود الأصلي ، باستثناء أن إعادة إنتاج تجاربنا (مجموعة بيانات QM9 و Varmisuse) يمكن القيام بها عن طريق تشغيل البرنامج النصي tf-gnn-samples/run_qm9_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 بواسطة Errica et al. (ICLR'2020). يمكن استخدام هذا المشروع لإعادة إنتاج التجارب البيولوجية (القسم 4.3 والإنزيمات ومجموعات بيانات NCI1). يعتمد هذا المشروع الفرعي على Pytorch 1.4 و Pytorch-Geometric. للحصول على تبعيات وتعليمات إضافية ، راجع README الأصلي: https://github.com/diningphil/gnn-comparison/blob/master/readme.md. تعتبر تعليمات last_layer_fa
هي True
، باستثناء أننا أضفنا علامة إضافية إلى كل config_*.yml
التعديل الرئيسي الذي أجريناه هو استخدام طبقة مالية بالكامل كطبقة GNN الأخيرة.تم تصميم هذا المشروع ليكون مفيدًا في تجربة بنيات GNN الجديدة وحلول جديدة للمشكلة المفرطة للاستمتاع.
لا تتردد في فتح مشكلة مع أي أسئلة.
يعتمد هذا المشروع على Pytorch 1.4.0 ومكتبة Pytorch الهندسية.
pip install -r requirements.txt
يسرد ملف requirements.txt
المتطلبات الإضافية. ومع ذلك ، قد يتطلب Pytorch الهندسة التثبيت اليدوي ، وبالتالي نوصي باستخدام ملف requirements.txt
. txt فقط بعد ذلك.
تحقق من أن استيراد التبعيات لا يزال دون أخطاء:
python -c 'import torch; import torch_geometric'
قد يتطلب التدريب على الأشجار الكبيرة (العمق = 8) حوالي 60 جيجابايت من ذاكرة الوصول العشوائي وحوالي 10 جيجابايت من ذاكرة 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
وشاهد الأعلام المتاحة. على سبيل المثال ، لتدريب GGNN بعمق = 4 ، قم بتشغيل:
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
هنا ، على سبيل المثال: 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}
}