mdeff / cnn_graph

Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering
https://arxiv.org/abs/1606.09375
MIT License
1.34k stars 391 forks source link
convolutional-neural-networks deep-learning graph-neural-networks graph-signal-processing graphs

Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering

The code in this repository implements an efficient generalization of the popular Convolutional Neural Networks (CNNs) to arbitrary graphs, presented in our paper:

Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst, Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering, Neural Information Processing Systems (NIPS), 2016.

Additional material:

There is also implementations of the filters used in:

Installation

  1. Clone this repository.

    git clone https://github.com/mdeff/cnn_graph
    cd cnn_graph
  2. Install the dependencies. The code should run with TensorFlow 1.0 and newer.

    pip install -r requirements.txt  # or make install
  3. Play with the Jupyter notebooks.

    jupyter notebook

Reproducing our results

Run all the notebooks to reproduce the experiments on MNIST and 20NEWS presented in the paper.

cd nips2016
make

Using the model

To use our graph ConvNet on your data, you need:

  1. a data matrix where each row is a sample and each column is a feature,
  2. a target vector,
  3. optionally, an adjacency matrix which encodes the structure as a graph.

See the usage notebook for a simple example with fabricated data. Please get in touch if you are unsure about applying the model to a different setting.

License & co

The code in this repository is released under the terms of the MIT license. Please cite our paper if you use it.

@inproceedings{cnn_graph,
  title = {Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering},
  author = {Defferrard, Micha\"el and Bresson, Xavier and Vandergheynst, Pierre},
  booktitle = {Advances in Neural Information Processing Systems},
  year = {2016},
  url = {https://arxiv.org/abs/1606.09375},
}