在PyBrain神经网络中创建自定义连接

25

我想在PyBrain中创建一个遵循以下布局的人工神经网络:

layout

然而,我找不到实现这一点的正确方法。文档中唯一提供的选项是创建全连接层,而这并不符合我的要求:我希望我的一些输入节点连接到第二个隐藏层而不是第一个隐藏层。

2个回答

22
解决方法是使用您选择的连接类型,但使用“切片”参数:inSliceFrominSliceTooutSliceFromoutSliceTo。我同意文档应该提到这一点,目前只在Connection类的注释中提到了这一点。
以下是适用于您情况的示例代码:
#create network and modules
net = FeedForwardNetwork()
inp = LinearLayer(9)
h1 = SigmoidLayer(2)
h2 = TanhLayer(2)
outp = LinearLayer(1)
# add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
net.addModule(h2)
# create connections
net.addConnection(FullConnection(inp, h1, inSliceTo=6))
net.addConnection(FullConnection(inp, h2, inSliceFrom=6))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))
# finish up
net.sortModules()

嗯,我实际上是从源代码中学习PyBrain的,除了使用教程之外,我还会深入检查教程中的代码行。结果证明这是一个好主意? :) 阅读代码,而不是文档 - Python 有文档字符串! :) - n611x007
嗨,只是好奇。假设我们想创建一个级联前馈神经网络(http://www.mathworks.com/help/nnet/ref/cascadeforwardnet.html),那么我们只需要在任意两个层之间创建连接就可以了吗? - meta_warrior

0

与Schaul建议的方法不同的另一种方式是使用多个输入层。

#create network
net = FeedForwardNetwork()

# create and add modules
input_1 = LinearLayer(6)
net.addInputModule(input_1)
input_2 = LinearLayer(3)
net.addInputModule(input_2)
h1 = SigmoidLayer(2)
net.addModule(h1)
h2 = SigmoidLayer(2)
net.addModule(h2)
outp = SigmoidLayer(1)
net.addOutputModule(outp)

# create connections
net.addConnection(FullConnection(input_1, h1))
net.addConnection(FullConnection(input_2, h2))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))

net.sortModules()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接