PyBrain:我如何在神经网络中加入特定权重?

Gia*_*nou 8 python neural-network pybrain

我试图基于给定的事实重建一个神经网络.它有3个输入,一个隐藏层和一个输出.我的问题是权重也给出了,所以我不需要训练.

我想也许我可以保存类似的结构神经网络的训练并相应地改变值.你认为这会有效吗?还有其他的想法.谢谢.

神经网络代码:

    net = FeedForwardNetwork()
    inp = LinearLayer(3)
    h1 = SigmoidLayer(1)
    outp = LinearLayer(1)

    # add modules
    net.addOutputModule(outp)
    net.addInputModule(inp)
    net.addModule(h1)

    # create connections
    net.addConnection(FullConnection(inp, h1))
    net.addConnection(FullConnection(h1, outp))

    # finish up
    net.sortModules()


    trainer = BackpropTrainer(net, ds)
    trainer.trainUntilConvergence()
Run Code Online (Sandbox Code Playgroud)

保存培训并加载代码如何保存和恢复PyBrain培训?

# Using NetworkWriter

from pybrain.tools.shortcuts import buildNetwork
from pybrain.tools.xml.networkwriter import NetworkWriter
from pybrain.tools.xml.networkreader import NetworkReader

net = buildNetwork(2,4,1)

NetworkWriter.writeToFile(net, 'filename.xml')
net = NetworkReader.readFrom('filename.xml') 
Run Code Online (Sandbox Code Playgroud)

sju*_*dǝʊ 7

我很好奇如何阅读已经训练过的网络(使用xml工具).因为,这意味着网络权重可以某种方式设置.因此,在我发现的NetworkReader文档中,您可以使用设置参数_setParameters().

然而,下划线意味着私人方法可能会产生一些副作用.还要记住,具有权重的向量必须与最初构造的网络长度相同.

>>> import numpy
>>> from pybrain.tools.shortcuts import buildNetwork
>>> net = buildNetwork(2,3,1)
>>> net.params

array([...some random values...])

>>> len(net.params)

13

>>> new_params = numpy.array([1.0]*13)
>>> net._setParameters(new_params)
>>> net.params

array([1.0, ..., 1.0])
Run Code Online (Sandbox Code Playgroud)

其他重要的是将值放在正确的顺序.例如上面它是这样的:

[  1., 1., 1., 1., 1., 1.,      1., 1., 1.,        1.,       1., 1., 1.    ] 
     input->hidden0            hidden0->out     bias->out   bias->hidden0   
Run Code Online (Sandbox Code Playgroud)

要确定哪些权重属于图层之间的连接,请尝试此操作

# net is our neural network from previous example
for c in [connection for connections in net.connections.values() for connection in connections]:
    print("{} -> {} => {}".format(c.inmod.name, c.outmod.name, c.params))
Run Code Online (Sandbox Code Playgroud)

无论如何,我仍然不知道层之间的确切权重顺序......