PyBrain: при создании сети с нуля, как и где вы создаете уклон?

Следуя документации PyBrain, Создание сетей с модулями и соединениями, я строю нейронную сеть по частям (в отличие от использования ярлыка buildNetwork). Я строю простую трехслойную (входную, скрытую, выходную) нейронную сеть. Как правильно добавить единицу смещения?

Я предполагаю, что я создаю модуль BiasUnit как в:

b = BiasUnit(name='bias')
network.addModule(b)

Это правильный путь? Должен ли я создавать объект FullConnection? Если да, то что я должен подключить?


person User    schedule 11.04.2012    source источник
comment
Как бы я ни любил Python, я перешел на использование fanntool на основе C, который выбивает PyBrain из воды с точки зрения производительности.   -  person User    schedule 20.12.2012


Ответы (2)


Реализованный PyBrain имеет открытый исходный код, и у меня есть исходный код в моем каталоге Python. Я открыл файл C:\Python27\Lib\site-packages\pybrain\tools\shortcuts.py. Внутри этого файла я нашел функцию buildNetwork и увидел, как она добавляет BiasUnit. Соответствующий код находится здесь:

...
n = Network()
# linear input layer
n.addInputModule(LinearLayer(layers[0], name='in'))
# output layer of type 'outclass'
n.addOutputModule(opt['outclass'](layers[-1], name='out'))
if opt['bias']:
    # add bias module and connection to out module, if desired
    n.addModule(BiasUnit(name='bias'))
    if opt['outputbias']:
        n.addConnection(FullConnection(n['bias'], n['out']))
# arbitrary number of hidden layers of type 'hiddenclass'
for i, num in enumerate(layers[1:-1]):
    layername = 'hidden%i' % i
    n.addModule(opt['hiddenclass'](num, name=layername))
    if opt['bias']:
        # also connect all the layers with the bias
        n.addConnection(FullConnection(n['bias'], n[layername]))
# connections between hidden layers
...

В основном это выглядит так, как будто он создает один BiasUnit и подключает его к каждому скрытому слою и, возможно, к выходному слою.

person User    schedule 12.04.2012
comment
Хорошая детективная работа. Обратите внимание, что buildNetwork — это просто ярлык, и в документации API обсуждается создание сети (посмотрите документы для сети). - person Mike Axiak; 12.04.2012

Вот простой пример:

n = RecurrentNetwork()
n.addModule(TanhLayer(hsize, name = 'h'))
n.addModule(BiasUnit(name = 'bias'))
n.addOutputModule(LinearLayer(1, name = 'out'))
n.addConnection(FullConnection(n['bias'], n['h']))
n.addConnection(FullConnection(n['h'], n['out']))
n.sortModules()

Обратите внимание, что BiasUnit соединяется с TanhLayer, эффективно делая слой h слоем со смещением.

person mjaskowski    schedule 12.11.2015