PyBrain - Trabalhando com Redes Recorrentes

Redes recorrentes são o mesmo que rede feed-forward, com a única diferença de que você precisa lembrar os dados em cada etapa. O histórico de cada etapa deve ser salvo.

Vamos aprender como -

  • Crie uma rede recorrente
  • Adicionando Módulos e Conexão

Criação de uma rede recorrente

Para criar uma rede recorrente, usaremos a classe RecurrentNetwork conforme mostrado abaixo -

rn.py

from pybrain.structure import RecurrentNetwork
recurrentn = RecurrentNetwork()
print(recurrentn)

python rn.py

C:\pybrain\pybrain\src>python rn.py
RecurrentNetwork-0
Modules:
[]
Connections:
[]
Recurrent Connections:
[]

Podemos ver uma nova conexão chamada Conexões recorrentes para a rede recorrente. No momento, não há dados disponíveis.

Vamos agora criar as camadas e adicionar aos módulos e criar conexões.

Adicionando Módulos e Conexão

Vamos criar camadas, ou seja, entrada, oculta e saída. As camadas serão adicionadas ao módulo de entrada e saída. A seguir, criaremos a conexão de entrada para oculto, oculto para saída e uma conexão recorrente entre oculto para oculto.

Aqui está o código para a rede recorrente com módulos e conexões.

rn.py

from pybrain.structure import RecurrentNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
recurrentn = RecurrentNetwork()

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

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

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

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

print(recurrentn)

python rn.py

C:\pybrain\pybrain\src>python rn.py
RecurrentNetwork-6
Modules:
[<LinearLayer 'rn_in'>, <SigmoidLayer 'rn_hidden'>, 
   <LinearLayer 'rn_output'>]
Connections:
[<FullConnection 'FullConnection-4': 'rn_hidden' -> 'rn_output'>, 
   <FullConnection 'FullConnection-5': 'rn_in' -> 'rn_hidden'>]
Recurrent Connections:
[<FullConnection 'FullConnection-3': 'rn_hidden' -> 'rn_hidden'>]

Na saída acima podemos ver os Módulos, Conexões e Conexões Recorrentes.

Vamos agora ativar a rede usando o método de ativação conforme mostrado abaixo -

rn.py

Adicione o código abaixo ao criado anteriormente -

#activate network using activate() method
act1 = recurrentn.activate((2, 2))
print(act1)

act2 = recurrentn.activate((2, 2))
print(act2)

python rn.py

C:\pybrain\pybrain\src>python rn.py
[-1.24317586]
[-0.54117783]