Skip to main content

A Gallery for Benchmarking Graph Neural Networks and Graph Adversarial Learning.

Project description

banner

TensorFlow or PyTorch, both!

Python tensorflow pytorch pypi license

GraphGallery

GraphGallery is a gallery for benchmarking Graph Neural Networks (GNNs) and Graph Adversarial Learning with TensorFlow 2.x and PyTorch backend. Besides, Pytorch Geometric (PyG) backend and Deep Graph Library (DGL) backend now are available in GraphGallery.

💨 NEWS

  • We have removed the TensorFlow dependencyand use PyTorch as the default backend for GraphGallery .
  • We have integrated the Adversarial Attacks in this project, examples please refer to Graph Adversarial Learning examples.

🚀 Installation

# Outdated
pip install -U graphgallery

or

# Recommended
git clone https://github.com/EdisonLeeeee/GraphGallery.git && cd GraphGallery
pip install -e . --verbose

where -e means "editable" mode so you don't have to reinstall every time you make changes.

🤖 Implementations

In detail, the following methods are currently implemented:

Node Classification Task

ChebyNet from Michaël Defferrard et al, 📝Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering (NeurIPS'16) [:octocat:TensorFLow] [🔥PyTorch]
GCN from Thomas N. Kipf et al, 📝Semi-Supervised Classification with Graph Convolutional Networks (ICLR'17) [:octocat:TensorFLow] [🔥PyTorch] [🔥PyG] [🔥DGL]
GraphSAGE from William L. Hamilton et al, 📝Inductive Representation Learning on Large Graphs (NeurIPS'17) [:octocat:TensorFLow] [🔥PyTorch]
FastGCN from Jie Chen et al, 📝FastGCN: Fast Learning with Graph Convolutional Networks via Importance Sampling (ICLR'18) [:octocat:TensorFLow] [🔥PyTorch]
LGCN from Hongyang Gao et al, 📝Large-Scale Learnable Graph Convolutional Networks (KDD'18) [:octocat:TensorFLow] [🔥PyTorch]
GAT from Petar Veličković et al, 📝Graph Attention Networks (ICLR'18) [:octocat:TensorFLow] [🔥PyTorch] [🔥PyG]
SGC from Felix Wu et al, 📝Simplifying Graph Convolutional Networks (ICLR'19) [:octocat:TensorFLow] [🔥PyTorch] [🔥PyG]
GWNN from Bingbing Xu et al, 📝Graph Wavelet Neural Network (ICLR'19) [:octocat:TensorFLow] [🔥PyTorch]
GMNN from Meng Qu et al, 📝Graph Attention Networks (ICLR'19) [:octocat:TensorFLow] [🔥PyTorch]
ClusterGCN from Wei-Lin Chiang et al, 📝Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks (KDD'19) [:octocat:TensorFLow] [🔥PyTorch] [🔥PyG]
DAGNN from Meng Liu et al, 📝Towards Deeper Graph Neural Networks (KDD'20) [:octocat:TensorFLow] [🔥PyTorch]
GDC from Johannes Klicpera et al, 📝Diffusion Improves Graph Learning (NeurIPS'19) [:octocat:TensorFLow] [🔥PyTorch] [🔥PyG]
TAGCN from Du et al, 📝Topology Adaptive Graph Convolutional Networks (arxiv'17) [:octocat:TensorFLow] [🔥PyTorch]
APPNP, PPNP from Johannes Klicpera et al, 📝Predict then Propagate: Graph Neural Networks meet Personalized PageRank (ICLR'19) [:octocat:TensorFLow(APPNP)] [:octocat:TensorFLow(PPNP)] [🔥PyTorch(APPNP)] [🔥PyTorch(PPNP)]
PDN from Benedek Rozemberczki et al, 📝Pathfinder Discovery Networks for Neural Message Passing (ICLR'21) [🔥PyG]
SSGC from Zhu et al, 📝Simple Spectral Graph Convolution (ICLR'21) [:octocat:TensorFLow] [🔥PyTorch]
AGNN from Zhu et al, 📝Attention-based Graph Neural Network for semi-supervised learning (ICLR'18 openreview) [:octocat:TensorFLow] [🔥PyTorch]
ARMA from Bianchi et al., 📝Graph Neural Networks with convolutional ARMA filters (Arxiv'19) [:octocat:TensorFLow] [🔥PyTorch]
GraphMLP from Yang Hu et al., 📝Graph-MLP: Node Classification without Message Passing in Graph (Arxiv'21) [🔥PyTorch]

Defense models (for Graph Adversarial Learning)

Robust Optimization

RobustGCN from Petar Veličković et al, 📝Robust Graph Convolutional Networks Against Adversarial Attacks (KDD'19) [:octocat:TensorFLow] [🔥PyTorch]
SBVAT from Zhijie Deng et al, 📝Batch Virtual Adversarial Training for Graph Convolutional Networks (ICML'19) [:octocat:TensorFLow] [🔥PyTorch]
OBVAT from Zhijie Deng et al, 📝Batch Virtual Adversarial Training for Graph Convolutional Networks (ICML'19) [:octocat:TensorFLow] [🔥PyTorch]
SimPGCN from Wei Jin et al, 📝Node Similarity Preserving Graph Convolutional Networks (WSDM'21) [🔥PyTorch]
GCN-VAT, GraphVAT from Fuli Feng et al, 📝Graph Adversarial Training: Dynamically Regularizing Based on Graph Structure (TKDE'19) [🔥GCN-VAT-PyTorch] [🔥GraphVAT-PyTorch]
LATGCN from Hongwei Jin et al, 📝Latent Adversarial Training of Graph Convolution Networks (ICML@LRGSD'19) [🔥PyTorch]
DGAT from Weibo Hu et al, 📝Robust graph convolutional networks with directional graph adversarial training (Applied Intelligence'19) [🔥PyTorch]

Graph Purification

The graph purification methods are universal for all models, just specify:

graph_transform="purification_method"

so, here we only give the examples of GCN with purification methods, other models should work.

GCN-Jaccard from Huijun Wu et al, 📝Adversarial Examples on Graph Data: Deep Insights into Attack and Defense (IJCAI'19) [:octocat:TensorFLow] [🔥PyTorch]
GCN-SVD from Negin Entezari et al, 📝All You Need Is Low (Rank): Defending Against Adversarial Attacks on Graphs (WSDM'20) [:octocat:TensorFLow] [🔥PyTorch]

Embedding

Deepwalk from Bryan Perozzi et al, 📝DeepWalk: Online Learning of Social Representations (KDD'14) [Example]
Node2vec from Aditya Grover and Jure Leskovec, 📝node2vec: Scalable Feature Learning for Networks (KDD'16) [Example]

⚡ Quick Start on GNNs

Datasets

more details please refer to GraphData.

Example of GCN (Node Classification Task)

It takes just a few lines of code.

from graphgallery.gallery.nodeclas import GCN
trainer = GCN()
trainer.setup_graph(graph)
trainer.build()
history = trainer.fit(train_nodes, val_nodes)
results = trainer.evaluate(test_nodes)
print(f'Test loss {results.loss:.5}, Test accuracy {results.accuracy:.2%}')

Other models in the gallery are the same.

If you have any troubles, you can simply run trainer.help() for more messages.

Other Backends

>>> import graphgallery
# Default: PyTorch backend
>>> graphgallery.backend()
PyTorch 1.7.0cu101 Backend
# Switch to TensorFlow backend
>>> graphgallery.set_backend("tf")
# Switch to PyTorch backend
>>> graphgallery.set_backend("th")
# Switch to PyTorch Geometric backend
>>> graphgallery.set_backend("pyg")
# Switch to DGL PyTorch backend
>>> graphgallery.set_backend("dgl")

But your codes don't even need to change.

❓ How to add your datasets

This is motivated by gnn-benchmark

from graphgallery.data import Graph

# Load the adjacency matrix A, attribute matrix X and labels vector y
# A - scipy.sparse.csr_matrix of shape [num_nodes, num_nodes]
# X - scipy.sparse.csr_matrix or np.ndarray of shape [num_nodes, num_attrs]
# y - np.ndarray of shape [num_nodes]

mydataset = Graph(adj_matrix=A, node_attr=X, node_label=y)
# save dataset
mydataset.to_npz('path/to/mydataset.npz')
# load dataset
mydataset = Graph.from_npz('path/to/mydataset.npz')

⭐ Road Map

  • Add PyTorch trainers support
  • Add other frameworks (PyG and DGL) support
  • set tensorflow as optional dependency when using graphgallery
  • Add more GNN trainers (TF and Torch backend)
  • Support for more tasks, e.g., graph Classification and link prediction
  • Support for more types of graphs, e.g., Heterogeneous graph
  • Add Docstrings and Documentation (Building)
  • Comprehensive tutorials

❓ FAQ

😘 Acknowledgement

This project is motivated by Pytorch Geometric, Tensorflow Geometric, Stellargraph and DGL, etc., and the original implementations of the authors, thanks for their excellent works!

Cite

Please cite our paper (and the respective papers of the methods used) if you use this code in your own work:

@inproceedings{li2021graphgallery,
author = {Jintang Li and Kun Xu and Liang Chen and Zibin Zheng and Xiao Liu},
booktitle = {2021 IEEE/ACM 43rd International Conference on Software Engineering: Companion Proceedings (ICSE-Companion)},
title = {GraphGallery: A Platform for Fast Benchmarking and Easy Development of Graph Neural Networks Based Intelligent Software},
year = {2021},
pages = {13-16},
publisher = {IEEE Computer Society},
address = {Los Alamitos, CA, USA},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graphgallery-1.0.0.tar.gz (219.8 kB view details)

Uploaded Source

Built Distribution

graphgallery-1.0.0-cp37-cp37m-win_amd64.whl (511.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

File details

Details for the file graphgallery-1.0.0.tar.gz.

File metadata

  • Download URL: graphgallery-1.0.0.tar.gz
  • Upload date:
  • Size: 219.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.8

File hashes

Hashes for graphgallery-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a17c536248e9d438ca7b7879c0ecd0396bc336d866907c55d248fd823318bf75
MD5 d85692916ff47a0d82846000d5e1a3fb
BLAKE2b-256 be89c01dce3dcd82e6d485c07a4050fe8dbeb8b4c659f9cddc552efc8f9dac95

See more details on using hashes here.

File details

Details for the file graphgallery-1.0.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: graphgallery-1.0.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 511.4 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.8

File hashes

Hashes for graphgallery-1.0.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 01d758ded361a84641e254fe61fd47e905e2acda135f0199a8e7e7032f2bd548
MD5 c7ac84ada00595fac09a35000f0cc69b
BLAKE2b-256 fadc23d05b53e8307583e18bbec0838b03dd07ade3bf56f21873cf0ddd675372

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page