PyBrain - Lavorare con reti ricorrenti

Le reti ricorrenti sono le stesse della rete feed-forward con l'unica differenza che è necessario ricordare i dati in ogni passaggio. La cronologia di ogni passaggio deve essere salvata.

Impareremo come -

  • Crea una rete ricorrente
  • Aggiunta di moduli e connessione

Creazione di una rete ricorrente

Per creare una rete ricorrente, useremo la classe RecurrentNetwork come mostrato di seguito:

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:
[]

Possiamo vedere una nuova connessione chiamata Connessioni ricorrenti per la rete ricorrente. Al momento non ci sono dati disponibili.

Creiamo ora i livelli e aggiungiamoli ai moduli e creiamo connessioni.

Aggiunta di moduli e connessione

Creeremo livelli, cioè input, hidden e output. I livelli verranno aggiunti al modulo di input e output. Successivamente, creeremo la connessione per l'input a nascosto, da nascosto a output e una connessione ricorrente tra nascosto e nascosto.

Ecco il codice per la rete ricorrente con moduli e connessioni.

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

Nell'output sopra possiamo vedere i moduli, le connessioni e le connessioni ricorrenti.

Attiva ora la rete utilizzando il metodo di attivazione come mostrato di seguito:

rn.py

Aggiungi sotto il codice a quello creato in precedenza -

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