PyBrain - praca z powtarzającymi się sieciami
Sieci rekurencyjne są takie same jak sieci z wyprzedzeniem, z tą różnicą, że na każdym kroku trzeba pamiętać dane. Historia każdego kroku musi zostać zapisana.
Dowiemy się, jak -
- Utwórz powtarzającą się sieć
- Dodawanie modułów i połączeń
Tworzenie powtarzającej się sieci
Aby utworzyć powtarzającą się sieć, użyjemy klasy RecurrentNetwork, jak pokazano poniżej -
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:
[]
Możemy zobaczyć nowe połączenie o nazwie Recurrent Connections dla powtarzającej się sieci. W tej chwili nie ma dostępnych danych.
Stwórzmy teraz warstwy, dodajmy do modułów i stwórzmy połączenia.
Dodawanie modułów i połączeń
Będziemy tworzyć warstwy, tj. Wejściowe, ukryte i wyjściowe. Warstwy zostaną dodane do modułu wejściowego i wyjściowego. Następnie utworzymy połączenie dla danych wejściowych z ukrytym, ukryte z wyjściem i powtarzające się połączenie między ukrytym i ukrytym.
Oto kod sieci Recurrent z modułami i połączeniami.
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'>]
W powyższym wyjściu widzimy moduły, połączenia i powtarzające się połączenia.
Aktywujmy teraz sieć za pomocą metody aktywacji, jak pokazano poniżej -
rn.py
Dodaj poniższy kod do utworzonego wcześniej -
#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]