6

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

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

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

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

4

2 回答 2

10

Realized 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 并将其连接到每个隐藏层,也可以选择连接到输出层。

于 2012-04-12T00:31:45.710 回答
1

这里有一个简单的例子

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()

请注意,这BiasUnitTanhLayer有效地使该h层成为具有偏差的层有关。

于 2015-11-12T16:51:08.213 回答