Создание разделенных связей веса в Pybrain

Я пытаюсь создать нейронную сеть в PyBrain, который использует общие связи веса, но испытывает затруднения при выполнении так. Я не нашел слишком много примеров, которые используют подобные связи, но думали, что я подобрал способ использовать их от тех, которых я нашел и исходный код. Но по-видимому я не был так удачлив.

As a simple example, I'm trying to create the following shared weight neural network: a simple SWNN http://i49.tinypic.com/ztuc2g.jpg

Связи, показанные в прямоугольниках, я хотел бы быть разделенным в этом веса вдоль каждого пути, являются тем же самым (обмен входного вектора [x, y] с [y, x] должен привести к той же самой продукции).

Я попытался построить эту архитектуру со следующим кодом:

from pybrain.structure.modules.linearlayer import LinearLayer
from pybrain.structure.modules.sigmoidlayer import SigmoidLayer
from pybrain.structure.moduleslice import ModuleSlice
from pybrain.structure.networks.feedforward import FeedForwardNetwork
from pybrain.structure.connections.shared import MotherConnection,SharedFullConnection

net=FeedForwardNetwork()

# make modules
inp=LinearLayer(2,name='input')
h1=SigmoidLayer(2,name='hidden')
outp=LinearLayer(1,name='output')

# now add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)

# now we need to create the connections
mc=MotherConnection(2,name='mother') 
mc2=MotherConnection(2,name='mother2')
topInput=ModuleSlice(inp,outSliceFrom=0,outSliceTo=1)
bottomInput=ModuleSlice(inp,outSliceFrom=1,outSliceTo=2)
topHidden=ModuleSlice(h1,inSliceFrom=0,inSliceTo=1)
bottomHidden=ModuleSlice(h1,inSliceFrom=1,inSliceTo=2)
net.addConnection(SharedFullConnection(mc,topInput,topHidden))
net.addConnection(SharedFullConnection(mc,bottomInput,bottomHidden))
net.addConnection(SharedFullConnection(mc2,topHidden,outp))
net.addConnection(SharedFullConnection(mc2,bottomHidden,outp))

# finish up
net.sortModules()

#print net.activate([2,1])

В вышеупомянутом коде я создал два MotherConnections, мГц и mc2, идея, являющаяся, что эти два объекта будут считать общие веса в моем первом и втором прямоугольнике, соответственно, показанными в числе. Я тогда использовал ModuleSlice, чтобы разделить входной модуль и скрытый модуль в две группы. Я тогда попробовал к addConnections использование мГц и mc2 контейнеров, чтобы соединить эти пути.

Я не получаю ошибку, управляя вышеупомянутым кодом. Но если я пытаюсь проверить сеть, не комментируя net.activate заявление в конце, я получаю следующую ошибку:

Traceback (most recent call last):
  File "test.py", line 38, in 
    print net.activate([2,1])
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/networks/feedforward.py", line 19, in activate
    return super(FeedForwardNetworkComponent, self).activate(inpt)
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-   py2.7.egg/pybrain/structure/modules/module.py", line 123, in activate
    self.forward()
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/modules/module.py", line 75, in forward
    self.outputbuffer[self.offset])
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-  py2.7.egg/pybrain/structure/networks/feedforward.py", line 32, in _forwardImplementation
    c.forward()
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/connection.py", line 77, in forward
    self.outmod.inputbuffer[outmodOffset, self.outSliceFrom:self.outSliceTo])
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/shared.py", line 64, in _forwardImplementation
    FullConnection._forwardImplementation(self, inbuf, outbuf)
  File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/full.py", line 19, in _forwardImplementation
    outbuf += dot(reshape(self.params, (self.outdim, self.indim)), inbuf)
  File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 171, in reshape
    return reshape(newshape, order=order)
ValueError: total size of new array must be unchanged

таким образом, я предполагаю, что должен неправильно понимать что-то о пути, это настраивается. Большое спасибо любому, кто может указать, где в моем понимании этих команд я теряюсь!

3
nl ja de

1 ответы

Я, возможно, выяснил проблему. Я думаю, что должен был включать outSlices в свои определения скрытого слоя для topHidden и bottomHidden, такой как

topHidden=ModuleSlice(h1,inSliceFrom=0,inSliceTo=1,outSliceFrom=0,outSliceTo=1)
bottomHidden=ModuleSlice(h1,inSliceFrom=1,inSliceTo=2,outSliceFrom=1,outSliceTo=2)

Наивно я предполагаю, что думал, что это не было необходимо, так как продукция всего в скрытом слое связывалась со слоем продукции. Однако, если это не сделано тогда, кажется, что скрытый слой не имеет правильного outdim (ension) и приводит к вышеупомянутой ошибке.
Кроме того, MotherConnections должен был быть определен как так:

mc=MotherConnection(1,name='mother')
mc2=MotherConnection(1,name='mother2')

Я экстенсивно еще не проверил эту сеть, но у этого больше, кажется, нет вышеупомянутой проблемы.

2
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

AI / Big Data / Machine Learning
AI / Big Data / Machine Learning
2 978 участник(ов)

Всё об AI, бигдата, о машинном обучении, и как правильно всё это готовить. For english: @bigdata_en По любым вопросам: @hitmaker Список интересных групп и каналов: https://github.com/goq/telegram-list

Data Science Chat
Data Science Chat
2 902 участник(ов)

Добро пожаловать в чат по анализу данных и машинному обучению. Вопросы или предложения по сотрудничеству: @ralovets Вакансии и реклама мероприятий разрешены только после согласования. Анти-спам бот для групп: @ProtectronBot

Нейронные сети (AI Community)
Нейронные сети (AI Community)
2 121 участник(ов)

Это чат про нейронные сети для членов AI Community.

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Нейронные сети (Microsoft Developer)
Нейронные сети (Microsoft Developer)
433 участник(ов)

О чём наш чат? Это чат про нейронные сети для всех, кто принимал участие в воркшопах по нейронным сетям с Димой Сошниковым, и не только. Первый из воркшопов проходил в рамках DevCon School в 2017 году: Часть 1: https://www.youtube.com/watch?v=uaBp0uiLvKQ Часть 2: https://www.youtube.com/watch?v=_sF8d9Yt7JI Часть 3: https://www.youtube.com/watch?v=N7hYq2dSY8A Лабы: https://github.com/shwars/NeuroWorkshop Здесь мы говорим про нейронные сети. Все общие вопросы вы можете задавать в чате @microsoftschool Правила чата Если вы хотите задать вопрос, сформулируйте его полностью, прежде чем задать. Уважайте время участников чата. Что запрещено? - Оскорбления, мат, реклама, флуд, флейм, спам, 18+ контент, оффтоп. Первое нарушение – предупреждение, второе – бан. Модераторы @shwars — Дмитрий Сошников @schvepsss — Елизавета Швец

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community