Создание пользовательских подключений в нейронных сетях PyBrain

Я хочу создать искусственную нейронную сеть (в PyBrain), которая следует следующему макету:

layout

Однако я не могу найти правильный способ добиться этого. Единственный вариант, который я вижу в документации, — это способ создания полносвязных слоев, чего я не хочу: я хочу, чтобы некоторые из моих входных узлов были подключены ко второму скрытому слою, а не к первому.


person Boris Gorelik    schedule 17.04.2011    source источник


Ответы (2)


Решение состоит в том, чтобы использовать выбранный вами тип подключения, но с параметрами slicing: inSliceFrom, inSliceTo, outSliceFrom и outSliceTo. Я согласен, что документация должна упоминать об этом, пока это только в комментариях класса Connection.

Вот пример кода для вашего случая:

#create network and modules
net = FeedForwardNetwork()
inp = LinearLayer(9)
h1 = SigmoidLayer(2)
h2 = TanhLayer(2)
outp = LinearLayer(1)
# add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
net.addModule(h2)
# create connections
net.addConnection(FullConnection(inp, h1, inSliceTo=6))
net.addConnection(FullConnection(inp, h2, inSliceFrom=6))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))
# finish up
net.sortModules()
person schaul    schedule 19.04.2011
comment
Хм, на самом деле я изучаю PyBrain из самого исходного кода, за исключением того, что я использую его, чтобы включить его в учебник, но затем подробно проверяю, что его код делает со строками учебника. Выходит, это хорошая идея? :) Читайте код, а не документы — у python в любом случае есть строки документации! :) - person n611x007; 19.05.2013
comment
Привет, просто интересно. Допустим, мы хотим создать каскадную нейронную сеть с прямой связью (mathworks.com/help /nnet/ref/cascadeforwardnet.html), поэтому нам нужно будет просто создать соединения между любыми двумя слоями? - person meta_warrior; 14.01.2015

Альтернативный способ, предложенный Шоулом, состоит в использовании нескольких входных слоев.

#create network
net = FeedForwardNetwork()

# create and add modules
input_1 = LinearLayer(6)
net.addInputModule(input_1)
input_2 = LinearLayer(3)
net.addInputModule(input_2)
h1 = SigmoidLayer(2)
net.addModule(h1)
h2 = SigmoidLayer(2)
net.addModule(h2)
outp = SigmoidLayer(1)
net.addOutputModule(outp)

# create connections
net.addConnection(FullConnection(input_1, h1))
net.addConnection(FullConnection(input_2, h2))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))

net.sortModules()
person Staza    schedule 22.12.2016