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]