PyBrain - Работа с сетями прямого распространения

Сеть с прямой связью - это нейронная сеть, в которой информация между узлами движется в прямом направлении и никогда не будет перемещаться назад. Сеть прямого распространения - первая и самая простая из сетей, доступных в искусственной нейронной сети. Информация передается от входных узлов, после скрытых узлов, а затем в выходной узел.

В этой главе мы собираемся обсудить, как -

  • Создать сети прямого распространения
  • Добавить соединение и модули в FFN

Создание прямой сети

Вы можете использовать IDE python по своему выбору, то есть PyCharm. В этом случае мы используем код Visual Studio для написания кода и выполним то же самое в терминале.

Чтобы создать сеть прямого распространения, нам нужно импортировать ее из pybrain.structure как показано ниже -

ffn.py

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

Запустите ffn.py, как показано ниже -

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

Мы не добавляли никаких модулей и подключений к сети прямого распространения. Следовательно, сеть показывает пустые массивы для модулей и соединений.

Добавление модулей и подключений

Сначала мы создадим входные, скрытые и выходные слои и добавим их к модулям, как показано ниже -

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)

Вывод

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

Мы все еще получаем модули и соединения как пустые. Нам нужно обеспечить подключение к модулям, созданным, как показано ниже -

Вот код, в котором мы создали соединение между входным, скрытым и выходным слоями и добавили соединение в сеть.

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)

Вывод

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

Мы все еще не можем получить модули и соединения. Давайте теперь добавим последний шаг, то есть нам нужно добавить метод sortModules (), как показано ниже -

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)

Вывод

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

Теперь мы можем видеть модули и детали соединений для сети прямого распространения.