PyBrain - praca z sieciami typu Feed-Forward

Sieć ze sprzężeniem zwrotnym to sieć neuronowa, w której informacje między węzłami poruszają się w kierunku do przodu i nigdy nie będą podróżować wstecz. Sieć Feed Forward jest pierwszą i najprostszą spośród sieci dostępnych w sztucznej sieci neuronowej. Informacje są przekazywane z węzłów wejściowych, obok węzłów ukrytych, a później do węzła wyjściowego.

W tym rozdziale omówimy, jak -

  • Utwórz sieci przekazujące informacje
  • Dodaj połączenie i moduły do ​​FFN

Tworzenie sieci przekazywania

Możesz użyć dowolnego Pythona IDE, np. PyCharm. W tym celu używamy Visual Studio Code do pisania kodu i wykonujemy to samo w terminalu.

Aby utworzyć sieć z wyprzedzeniem, musimy ją zaimportować z pybrain.structure jak pokazano poniżej -

ffn.py

from pybrain.structure import FeedForwardNetwork
network = FeedForwardNetwork()
print(network)

Uruchom ffn.py, jak pokazano poniżej -

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-0
Modules:
[]
Connections:
[]

Nie dodaliśmy żadnych modułów ani połączeń do sieci feedforward. Dlatego sieć pokazuje puste tablice dla modułów i połączeń.

Dodawanie modułów i połączeń

Najpierw utworzymy warstwy wejściowe, ukryte, wyjściowe i dodamy je do modułów, jak pokazano poniżej -

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
network = FeedForwardNetwork()

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

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

print(network)

Wynik

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]

Wciąż mamy puste moduły i połączenia. Musimy zapewnić połączenie z modułami utworzonymi, jak pokazano poniżej -

Oto kod, w którym utworzyliśmy połączenie między warstwami wejściową, ukrytą i wyjściową i dodaliśmy połączenie do sieci.

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()

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

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

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

#add connection to the network
network.addConnection(input_to_hidden)
network.addConnection(hidden_to_output)

print(network)

Wynik

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-3
Modules:
[]
Connections:
[]

Nadal nie jesteśmy w stanie pobrać modułów i połączeń. Dodajmy teraz ostatni krok, tj. Musimy dodać metodę sortModules (), jak pokazano poniżej -

ffy.py

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer
from pybrain.structure import FullConnection
network = FeedForwardNetwork()

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

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

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

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

print(network)

Wynik

C:\pybrain\pybrain\src>python ffn.py
FeedForwardNetwork-6
Modules:
[<LinearLayer 'LinearLayer-3'gt;, <SigmoidLayer 'SigmoidLayer-7'>, 
   <LinearLayer 'LinearLayer-8'>]
Connections:
[<FullConnection 'FullConnection-4': 'SigmoidLayer-7' -> 'LinearLayer-8'>, 
   <FullConnection 'FullConnection-5': 'LinearLayer-3' -> 'SigmoidLayer-7'>]

Możemy teraz zobaczyć moduły i szczegóły połączeń dla sieci z wyprzedzeniem.