PyBrain:从头开始创建网络时如何以及在何处创建偏差?

时间:2012-04-11 23:52:49

标签: python neural-network pybrain

PyBrain文档Building Networks with Modules and Connections之后,我正在逐步构建神经网络(与使用buildNetwork快捷方式相反)。我正在构建一个简单的3层(输入,隐藏,输出)神经网络。如何正确添加偏置单元?

我猜我构建了一个BiasUnit模块,如下所示:

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

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

2 个答案:

答案 0 :(得分: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并将它连接到每个隐藏层,也可以选择连接到输出层。

答案 1 :(得分: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图层成为偏向的图层。