Esta es una implementación de TensorFlow de redes convolucionales de gráficos para la tarea de clasificación (semi-supervisada) de nodos en un gráfico, como se describe en nuestro artículo:
Thomas N. Kipf, Max Welling, Clasificación semi-supervisada con redes convolucionales gráficas (ICLR 2017)
Para una explicación de alto nivel, eche un vistazo a nuestra publicación de blog:
Thomas Kipf, Redes convolucionales Graph (2016)
python setup.py install
cd gcn
python train.py
Para usar sus propios datos, debe proporcionar
Eche un vistazo a la función load_data()
en utils.py
para un ejemplo.
En este ejemplo, cargamos datos de red de citas (Cora, CitaSeer o PubMed). Los conjuntos de datos originales se pueden encontrar aquí: http://www.cs.umd.edu/~sen/lbc-proj/lbc.html. En nuestra versión (consulte la carpeta data
) utilizamos divisiones de conjuntos de datos proporcionadas por https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, revisando el aprendizaje semi-supervisado con incrustaciones de gráficos, ICML 2016).
Puede especificar un conjunto de datos de la siguiente manera:
python train.py --dataset citeseer
(o editando train.py
)
Puede elegir entre los siguientes modelos:
gcn
: Red convolucional Graph (Thomas N. Kipf, Max Welling, Clasificación semi-supervisada con redes convolucionales de gráficos, 2016)gcn_cheby
: Versión polinomial de Chebyshev de la red convolucional gráfica como se describe en (Michaël Defferrard, Xavier Bresson, Pierre Vanderheynst, redes neuronales convolucionales en gráficos con filtrado espectral localizado, NIPS 2016)dense
: perceptrón multicapa básico que admite entradas escasas Nuestro marco también admite la clasificación por lotes de múltiples instancias gráficas (de tamaño potencialmente diferente) con una matriz de adyacencia cada una. Es mejor concatenar las matrices de características respectivas y construir una matriz de bloque-diagonal (escasa) donde cada bloque corresponde a la matriz de adyacencia de una instancia gráfica. Para la agrupación (en caso de salidas a nivel gráfico en lugar de salidas a nivel de nodo) es mejor especificar una matriz de agrupación simple que recolecte características de sus respectivas instancias gráficas, como se ilustra a continuación:
Cite nuestro documento si usa este código en su propio trabajo:
@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}
}