2012-04-11 34 views
6

PyBrain文档,Building Networks with Modules and Connections后,我正在分段构建神经网络(与使用buildNetwork快捷方式相反)。我正在构建一个简单的3层(输入,隐藏,输出)神经网络。我如何正确添加偏见单位?PyBrain:从头开始创建网络时,您是如何以及在哪里创建偏见的?

我猜我构建一个BiasUnit模块为:

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

这是正确的方式?我必须创建FullConnection对象吗?如果是这样,我应该连接什么?

+0

尽管我爱蟒蛇,但我已经转向使用基于C的[fanntool](http://code.google.com/p/fanntool/),它将PyBrain从性能。 – User 2012-12-20 16:05:34

回答

10

已实现的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并将其连接到每个隐藏层和任选到输出层为好。

+0

好侦探工作。请注意,buildNetwork只是一个捷径,在他们讨论的API文档中讨论了构建网络(查看Network的文档) – 2012-04-12 00:33:42

1

这里有一个simple example

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层与偏置层。