Esta é uma implementação do tensorflow de redes convolucionais de gráficos para a tarefa de classificação (semi-supervisionada) de nós em um gráfico, conforme descrito em nosso artigo:
Thomas N. Kipf, Max Welling, classificação semi-supervisionada com redes convolucionais de gráficos (ICLR 2017)
Para uma explicação de alto nível, dê uma olhada em nossa postagem no blog:
Thomas KIPF, Gráfico Convolucional Networks (2016)
python setup.py install
cd gcn
python train.py
Para usar seus próprios dados, você deve fornecer
Dê uma olhada na função load_data()
em utils.py
por exemplo.
Neste exemplo, carregamos dados de rede de citação (Cora, Citeseer ou PubMed). Os conjuntos de dados originais podem ser encontrados aqui: http://www.cs.umd.edu/~sen/lbc-proj/lbc.html. Em nossa versão (consulte a pasta data
), usamos divisões de dados fornecidas por https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, revisitando o aprendizado semi-supervisionado com gráficos, ICML 2016).
Você pode especificar um conjunto de dados da seguinte maneira:
python train.py --dataset citeseer
(ou editando train.py
)
Você pode escolher entre os seguintes modelos:
gcn
: Rede convolucional de gráficos (Thomas N. Kipf, Max Welling, classificação semi-supervisionada com redes convolucionais de gráficos, 2016)gcn_cheby
: Versão polinomial Chebyshev da rede convolucional de gráficos, conforme descrito em (Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst, redes neurais convolucionais em gráficos com filtragem espectral localizada rápida, NIPS 2016)dense
: perceptron básico de várias camadas que suporta entradas esparsas Nossa estrutura também suporta a classificação em lote de várias instâncias gráficas (de tamanho potencialmente diferente) com uma matriz de adjacência cada. É melhor concatenar as respectivas matrizes de características e construir uma matriz de bloco (esparsa)-diagonal, onde cada bloco corresponde à matriz de adjacência de uma instância do gráfico. Para agrupamento (no caso de saídas no nível do gráfico, em oposição às saídas no nível do nó), é melhor especificar uma matriz de pool simples que coleta recursos de suas respectivas instâncias gráficas, conforme ilustrado abaixo:
Cite nosso artigo se você usar este código em seu próprio trabalho:
@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}
}