Uma implementação de Pytorch da Rede Neural de Graph Capsule (ICLR 2019).

As incorporações de nó de alta qualidade aprendidas com as redes neurais gráficas (GNNs) foram aplicadas a uma ampla gama de aplicativos baseados em nós e alguns deles alcançaram desempenho de ponta (SOTA). No entanto, ao aplicar incorporações de nó aprendidas com os GNNs para gerar incorporações gráficas, a representação do nó escalar pode não ser suficiente para preservar as propriedades do nó/gráfico com eficiência, resultando em incorporações de gráficos abaixo do ideal. Inspirado na rede neural da cápsula (CAPSNET), propomos a rede neural de gráficos da cápsula (Capsgnn), que adota o conceito de cápsulas para abordar a fraqueza nos algoritmos de incorporação de gráficos baseados em GNN existentes. Ao extrair recursos do nó na forma de cápsulas, o mecanismo de roteamento pode ser utilizado para capturar informações importantes no nível do gráfico. Como resultado, nosso modelo gera várias incorporações para cada gráfico para capturar propriedades gráficas de diferentes aspectos. O módulo de atenção incorporado em Capsgnn é usado para combater gráficos com vários tamanhos, o que também permite que o modelo se concentre em partes críticas dos gráficos. Nossas extensas avaliações com 10 conjuntos de dados estruturados por gráficos demonstram que o Capsgnn possui um mecanismo poderoso que opera para capturar propriedades macroscópicas de todo o gráfico por orientação de dados. Ele supera outras técnicas do SOTA em várias tarefas de classificação de gráficos, em virtude do novo instrumento.
Este repositório fornece uma implementação de Pytorch de Capsgnn, conforme descrito no artigo:
Rede neural de gráficos de cápsula. Zhang Xinyi, Lihui Chen. ICLR, 2019. [Paper]
A implementação da rede neural da cápsula principal adaptada está disponível [aqui].
A base de código é implementada no Python 3.5.2. As versões do pacote usadas para desenvolvimento estão logo abaixo.
networkx 2.4
tqdm 4.28.1
numpy 1.15.4
pandas 0.23.4
texttable 1.5.0
scipy 1.1.0
argparse 1.1.0
torch 1.1.0
torch-scatter 1.4.0
torch-sparse 0.4.3
torch-cluster 1.4.5
torch-geometric 1.3.2
torchvision 0.3.0
O código leva os gráficos para treinamento de uma pasta de entrada onde cada gráfico é armazenado como um JSON. Os gráficos usados para teste também são armazenados como arquivos JSON. Cada identificação de nó e rótulo do nó deve ser indexado a partir de 0. As chaves dos dicionários são strings armazenados para possibilitar a serialização do JSON.
Cada arquivo JSON possui a seguinte estrutura de valor-chave:
{ "edges" : [ [ 0 , 1 ] , [ 1 , 2 ] , [ 2 , 3 ] , [ 3 , 4 ] ] ,
"labels" : { "0" : "A" , "1" : "B" , "2" : "C" , "3" : "A" , "4" : "B" } ,
"target" : 1 }A chave ** bordas ** tem um valor de lista de arestas que desce a estrutura de conectividade. A chave ** rótulos ** possui rótulos para cada nó que são armazenados como um dicionário - dentro deste dicionário aninhado, os rótulos são valores, os identificadores de nó são chaves. A chave ** Target ** tem um valor inteiro que é a associação da classe.
As previsões são salvas no diretório `output/`. Cada incorporação possui um cabeçalho e uma coluna com os identificadores de gráfico. Finalmente, as previsões são classificadas pela coluna Identificador.
Treinamento Um modelo Capsgnn é tratado pelo script `src/main.py`, que fornece os seguintes argumentos da linha de comando.
--training-graphs STR Training graphs folder. Default is `input/train/`.
--testing-graphs STR Testing graphs folder. Default is `input/test/`.
--prediction-path STR Output predictions file. Default is `output/watts_predictions.csv`.
--epochs INT Number of epochs. Default is 100.
--batch-size INT Number fo graphs per batch. Default is 32.
--gcn-filters INT Number of filters in GCNs. Default is 20.
--gcn-layers INT Number of GCNs chained together. Default is 2.
--inner-attention-dimension INT Number of neurons in attention. Default is 20.
--capsule-dimensions INT Number of capsule neurons. Default is 8.
--number-of-capsules INT Number of capsules in layer. Default is 8.
--weight-decay FLOAT Weight decay of Adam. Defatuls is 10^-6.
--lambd FLOAT Regularization parameter. Default is 0.5.
--theta FLOAT Reconstruction loss weight. Default is 0.1.
--learning-rate FLOAT Adam learning rate. Default is 0.01.
Os seguintes comandos aprendem um modelo e salvam as previsões. Treinando um modelo no conjunto de dados padrão:
$ python src/main.py
Treinando um modelo Capsgnnn para 100 épocas.
$ python src/main.py --epochs 100Alterando o tamanho do lote.
$ python src/main.py --batch-size 128Licença