Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tkipf/gcn
Implementation of Graph Convolutional Networks in TensorFlow
https://github.com/tkipf/gcn
Last synced: 2 days ago
JSON representation
Implementation of Graph Convolutional Networks in TensorFlow
- Host: GitHub
- URL: https://github.com/tkipf/gcn
- Owner: tkipf
- License: mit
- Created: 2016-11-11T10:59:21.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2023-04-14T08:09:28.000Z (over 1 year ago)
- Last Synced: 2024-12-05T02:04:33.106Z (9 days ago)
- Language: Python
- Homepage:
- Size: 4.97 MB
- Stars: 7,159
- Watchers: 157
- Forks: 1,998
- Open Issues: 124
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-gcn - tkipf/gcn
- awesome-graph-based-semi-supervised-learning - code
- graph-networks - Semi-Supervised Classification with Graph Convolutional Networks
- StarryDivineSky - tkipf/gcn - gcn) (图卷积网络 / 网络服务_其他)
README
# Graph Convolutional Networks
This is a TensorFlow implementation of Graph Convolutional Networks for the task of (semi-supervised) classification of nodes in a graph, as described in our paper:
Thomas N. Kipf, Max Welling, [Semi-Supervised Classification with Graph Convolutional Networks](http://arxiv.org/abs/1609.02907) (ICLR 2017)For a high-level explanation, have a look at our blog post:
Thomas Kipf, [Graph Convolutional Networks](http://tkipf.github.io/graph-convolutional-networks/) (2016)
## Installation
```bash
python setup.py install
```## Requirements
* tensorflow (>0.12)
* networkx## Run the demo
```bash
cd gcn
python train.py
```## Data
In order to use your own data, you have to provide
* an N by N adjacency matrix (N is the number of nodes),
* an N by D feature matrix (D is the number of features per node), and
* an N by E binary label matrix (E is the number of classes).Have a look at the `load_data()` function in `utils.py` for an example.
In this example, we load citation network data (Cora, Citeseer or Pubmed). The original datasets can be found here: http://www.cs.umd.edu/~sen/lbc-proj/LBC.html. In our version (see `data` folder) we use dataset splits provided by https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, [Revisiting Semi-Supervised Learning with Graph Embeddings](https://arxiv.org/abs/1603.08861), ICML 2016).
You can specify a dataset as follows:
```bash
python train.py --dataset citeseer
```(or by editing `train.py`)
## Models
You can choose between the following models:
* `gcn`: Graph convolutional network (Thomas N. Kipf, Max Welling, [Semi-Supervised Classification with Graph Convolutional Networks](http://arxiv.org/abs/1609.02907), 2016)
* `gcn_cheby`: Chebyshev polynomial version of graph convolutional network as described in (Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst, [Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering](https://arxiv.org/abs/1606.09375), NIPS 2016)
* `dense`: Basic multi-layer perceptron that supports sparse inputs## Graph classification
Our framework also supports batch-wise classification of multiple graph instances (of potentially different size) with an adjacency matrix each. It is best to concatenate respective feature matrices and build a (sparse) block-diagonal matrix where each block corresponds to the adjacency matrix of one graph instance. For pooling (in case of graph-level outputs as opposed to node-level outputs) it is best to specify a simple pooling matrix that collects features from their respective graph instances, as illustrated below:
![graph_classification](https://user-images.githubusercontent.com/7347296/34198790-eb5bec96-e56b-11e7-90d5-157800e042de.png)
## Cite
Please cite our paper if you use this code in your own work:
```
@inproceedings{kipf2017semi,
title={Semi-Supervised Classification with Graph Convolutional Networks},
author={Kipf, Thomas N. and Welling, Max},
booktitle={International Conference on Learning Representations (ICLR)},
year={2017}
}
```