PyBrain - Trabalhando com Redes Feed-Forward

Uma rede feed-forward é uma rede neural, onde as informações entre os nós se movem na direção para frente e nunca viajam para trás. A rede Feed Forward é a primeira e a mais simples entre as redes disponíveis na rede neural artificial. As informações são passadas dos nós de entrada, ao lado dos nós ocultos e posteriormente ao nó de saída.

Neste capítulo, vamos discutir como -

  • Criar redes feed-forward
  • Adicionar conexão e módulos ao FFN

Criação de uma rede feed Forward

Você pode usar o IDE python de sua escolha, ou seja, PyCharm. Neste, estamos usando o Visual Studio Code para escrever o código e executaremos o mesmo no terminal.

Para criar uma rede feedforward, precisamos importá-la de pybrain.structure como mostrado abaixo -

ffn.py

from pybrain.structure import FeedForwardNetwork
network = FeedForwardNetwork()
print(network)

Execute ffn.py conforme mostrado abaixo -

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-0
Modules:
[]
Connections:
[]

Não adicionamos módulos e conexões à rede feedforward. Portanto, a rede mostra arrays vazios para Módulos e Conexões.

Adicionando Módulos e Conexões

Primeiro, criaremos camadas de entrada, ocultas e de saída e as adicionaremos aos módulos como mostrado abaixo -

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
network = FeedForwardNetwork()

#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)

#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)

print(network)

Resultado

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]

Ainda estamos obtendo os módulos e conexões como vazios. Precisamos fornecer uma conexão para os módulos criados conforme mostrado abaixo -

Aqui está o código onde criamos uma conexão entre as camadas de entrada, ocultas e de saída e adicionamos a conexão à rede.

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()

#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)

#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)

#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)

#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)

print(network)

Resultado

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]

Ainda não conseguimos obter os módulos e as conexões. Vamos agora adicionar a etapa final, ou seja, precisamos adicionar o método sortModules () como mostrado abaixo -

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()

#creating layer for input => 2 , hidden=> 3 and output=>1
inputLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outputLayer = LinearLayer(1)

#adding the layer to feedforward network
network.addInputModule(inputLayer)
network.addModule(hiddenLayer)
network.addOutputModule(outputLayer)

#Create connection between input ,hidden and output
input_to_hidden = FullConnection(inputLayer, hiddenLayer)
hidden_to_output = FullConnection(hiddenLayer, outputLayer)

#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)
network.sortModules()

print(network)

Resultado

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-6
Modules:
[<LinearLayer 'LinearLayer-3'gt;, <SigmoidLayer 'SigmoidLayer-7'>, 
   <LinearLayer 'LinearLayer-8'>]
Connections:
[<FullConnection 'FullConnection-4': 'SigmoidLayer-7' -> 'LinearLayer-8'>, 
   <FullConnection 'FullConnection-5': 'LinearLayer-3' -> 'SigmoidLayer-7'>]

Agora podemos ver os módulos e os detalhes das conexões para feedforwardnetwork.