8

与えられた事実に基づいてニューラルネットワークを再現しようとしています.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()

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') 
4

1 に答える 1

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

他に重要なことは、値を正しい順序で並べることです。たとえば、上記は次のようになります。

[  1., 1., 1., 1., 1., 1.,      1., 1., 1.,        1.,       1., 1., 1.    ] 
     input->hidden0            hidden0->out     bias->out   bias->hidden0   

どの重みがレイヤー間のどの接続に属しているかを判断するには、これを試してください

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

とにかく、レイヤー間の重みの正確な順序はまだわかりません...

于 2013-01-08T00:01:25.757 に答える