Il s'agit d'une implémentation TensorFlow des réseaux de convolution des graphiques pour la tâche de la classification (semi-supervisée) des nœuds dans un graphique, comme décrit dans notre article:
Thomas N. Kipf, Max Welling, classification semi-supervisée avec des réseaux de convolution graphique (ICLR 2017)
Pour une explication de haut niveau, jetez un œil à notre article de blog:
Thomas Kipf, Graph Convolutional Networks (2016)
python setup.py install
cd gcn
python train.py
Pour utiliser vos propres données, vous devez fournir
Jetez un œil à la fonction load_data()
dans utils.py
pour un exemple.
Dans cet exemple, nous chargeons les données du réseau de citation (Cora, Citaiser ou PubMed). Les ensembles de données originaux peuvent être trouvés ici: http://www.cs.umd.edu/~sen/lbc-proj/lbc.html. Dans notre version (voir le dossier data
), nous utilisons des divisions de jeu de données fournies par https://github.com/Kimiyoung/Planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, revisitant l'apprentissage semi-supervisé avec GraphEnddings GraphEddings, ICML 2016).
Vous pouvez spécifier un ensemble de données comme suit:
python train.py --dataset citeseer
(ou en modifiant train.py
)
Vous pouvez choisir entre les modèles suivants:
gcn
: Graph Convolutional Network (Thomas N. Kipf, Max Welling, Classification semi-supervisée avec graphique Convolutional Networks, 2016)gcn_cheby
: Version polynomiale Chebyshev de Graph Convolutional Network, comme décrit dans (Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst, Réseaux de neurones convolutionnels sur des graphiques avec un filtrage spectral rapide, NIPS 2016)dense
: perceptron multicouche de base qui prend en charge les entrées clairsemées Notre cadre prend également en charge la classification par lots de plusieurs instances de graphiques (de taille potentiellement différente) avec une matrice d'adjacence chacune. Il est préférable de concaténer les matrices de fonctionnalités respectives et de construire une matrice de diagonale bloc (clairsemée) où chaque bloc correspond à la matrice d'adjacence d'une instance de graphique. Pour la mise en commun (dans le cas des sorties au niveau du graphique, par opposition aux sorties au niveau du nœud), il est préférable de spécifier une matrice de regroupement simple qui collecte les fonctionnalités de leurs instances de graphe respectives, comme illustré ci-dessous:
Veuillez citer notre article si vous utilisez ce code dans votre propre travail:
@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}
}