PyBrain: trabajo con redes recurrentes

Las redes recurrentes son las mismas que las redes de alimentación directa con la única diferencia de que debe recordar los datos en cada paso. El historial de cada paso debe guardarse.

Aprenderemos cómo -

  • Crea una red recurrente
  • Agregar módulos y conexión

Crear una red recurrente

Para crear una red recurrente, usaremos la clase RecurrentNetwork como se muestra a continuación:

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 una nueva conexión llamada Conexiones recurrentes para la red recurrente. Ahora mismo no hay datos disponibles.

Creemos ahora las capas y agreguemos módulos y creemos conexiones.

Agregar módulos y conexión

Vamos a crear capas, es decir, entrada, oculta y salida. Las capas se agregarán al módulo de entrada y salida. A continuación, crearemos la conexión para entrada a oculta, oculta a salida y una conexión recurrente entre oculta a oculta.

Aquí está el código para la red recurrente con módulos y conexiones.

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'>]

En la salida anterior podemos ver los Módulos, Conexiones y Conexiones recurrentes.

Activemos ahora la red usando el método de activación como se muestra a continuación:

rn.py

Agregue el siguiente código al creado 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]