Grafo de uma RN

É possível criar um gráfico que represente as conexões entre os neurônios de uma rede neural MLP, onde a espessura e a cor das linhas são proporcionais aos pesos das conexões, diferenciando pesos positivos (azul) e negativos (vermelho).

Você pode usar bibliotecas como matplotlib e networkx em Python para criar esse tipo de visualização. Embora não exista uma função pronta que faça exatamente isso de forma automática, você pode personalizar a plotagem das arestas (conexões) de acordo com os pesos.

Grafo de uma RNExemplo de ImplementaçãoExemplo rápido de como extrair pesos de um modelo Keras


Exemplo de Implementação

Aqui está um exemplo de como se poderia fazer isso (script grafo_rn1.py):

Comentários:

  1. Grafo Direcionado: Usamos networkx.DiGraph() para representar a rede neural, onde os nós são neurônios e as arestas são conexões com pesos.

  2. Cores e Espessuras:

    • Azul: Pesos positivos (quanto mais forte o azul, mais positivo).
    • Vermelho: Pesos negativos (quanto mais forte o vermelho, mais negativo).
    • Espessura: Proporcional ao valor absoluto do peso (width=abs(w) * scale_factor).
  3. Layout: Os neurônios são posicionados em camadas verticais (entrada, oculta, saída).

  4. Barra de Cores: Mostra a escala dos pesos para referência.

Personalização:

Alternativas: Se você estiver usando PyTorch ou TensorFlow/Keras, pode extrair os pesos diretamente do modelo treinado e plotá-los dessa forma. Bibliotecas como visualkeras também podem ser úteis, mas não oferecem a mesma personalização para pesos.

Exemplo de saída gerada:

grafo_rn1.png


Exemplo rápido de como extrair pesos de um modelo Keras

Depois é só substituir no código anterior.

Sugestão: poderíamos gerar uma figura .png à cada passos do treino de uma rede e "juntar" estes gráficos num arquivo animado .gif para mostrar como a rede evolui durante o treinamento.


Fernando Passold, em 02/04/2025