11

最後に、ファイルからネットワークをトレーニングすることができました:) pybrainを使用してネットワークをトレーニングし、それを使用する別の場所にNNを実装するため、ノードと重み、特に重みを出力します。

レイヤー、ノード、ノード間の重みを印刷して、簡単に複製できるようにする方法が必要です。これまでのところ、たとえばn ['in']を使用してレイヤーにアクセスでき、次にたとえば次のことができます。

dir(n ['in'])[' class '、' delattr '、' dict '、' doc '、' format '、' getattribute '、' hash '、' init '、' module '、' new '、 ' reduce '、' reduce_ex '、' repr '、' setattr '、' sizeof '、' str '、' subclasshook '、' weakref'、' _backwardImplementation'、' _forwardImplementation'、' _generateName'、' _getName'、' _growBuffers'、' _name'、' _nameIds'、' _resetBuffers'、' _setName'、' activate'、' activateOnDataset'、' argdict'、 'backActivate'、'backward'、'bufferlist'、'dim'、'forward'、'getName'、'indim'、'inputbuffer'、'inputerror'、'name'、'offset'、'outdim'、'outputbuffer '、' outputerror'、' paramdim'、' reset'、' シーケンシャル'、' setArgs'、' setName'、' shift'、' whichNeuron']

しかし、ここでウェイトにアクセスする方法がわかりません。params属性もあります。たとえば、私のネットワークはバイアスのある2 4 1であり、次のように表示されます。

n.params array([-0.8167133、1.00077451、-0.7591257、-1.1150532、-1.58789386、0.11625991、0.98547457、-0.99397871、-1.8324281、-2.42200963、1.90617387、1.93741167、-2.88433965、0.27449852、-1.52606976、2.39446258)

少なくとも重みがどのノードを接続するかについては、何が何であるかを言うのは難しいです。それが私が必要なものすべてです。

4

3 に答える 3

21

ネットワークの内部にアクセスする方法はたくさんあります。つまり、「モジュール」リストまたは「接続」ディクショナリを使用します。パラメータは、これらの接続またはモジュール内に保存されます。たとえば、以下は任意のネットワークのこのすべての情報を出力する必要があります。

for mod in net.modules:
    print("Module:", mod.name)
    if mod.paramdim > 0:
        print("--parameters:", mod.params)
    for conn in net.connections[mod]:
        print("-connection to", conn.outmod.name)
        if conn.paramdim > 0:
             print("- parameters", conn.params)
    if hasattr(net, "recurrentConns"):
        print("Recurrent connections")
        for conn in net.recurrentConns:
            print("-", conn.inmod.name, " to", conn.outmod.name)
            if conn.paramdim > 0:
                print("- parameters", conn.params)

よりきめ細かいもの(レイヤーレベルではなくニューロンレベル)が必要な場合は、それらのパラメーターベクトルをさらに分解する必要があります。または、単一ニューロンレイヤーからネットワークを構築する必要があります。

于 2011-11-17T02:12:47.567 に答える
11

これを試してみてください、それは私のために働きました:

def pesos_conexiones(n):
    for mod in n.modules:
        for conn in n.connections[mod]:
            print conn
            for cc in range(len(conn.params)):
                print conn.whichBuffers(cc), conn.params[cc]

結果は次のようになります。

<FullConnection 'co1': 'hidden1' -> 'out'>
(0, 0) -0.926912942354
(1, 0) -0.964135087592
<FullConnection 'ci1': 'in' -> 'hidden1'>
(0, 0) -1.22895643048
(1, 0) 2.97080368887
(2, 0) -0.0182867906276
(3, 0) 0.4292544603
(4, 0) 0.817440427069
(0, 1) 1.90099230604
(1, 1) 1.83477578625
(2, 1) -0.285569867513
(3, 1) 0.592193396226
(4, 1) 1.13092061631
于 2012-10-10T21:57:31.737 に答える
3

多分これは役に立ちますか(PyBrain for Python 3.2)?

C:\tmp\pybrain_examples>\Python32\python.exe
Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pybrain.tools.shortcuts import buildNetwork
>>> from pybrain.structure.modules.tanhlayer import TanhLayer
>>> from pybrain.structure.modules.softmax import SoftmaxLayer
>>>
>>> net = buildNetwork(4, 3, 1,bias=True,hiddenclass = TanhLayer, outclass =   SoftmaxLayer)
>>> print(net)
FeedForwardNetwork-8
Modules:
[<BiasUnit 'bias'>, <LinearLayer 'in'>, <TanhLayer 'hidden0'>, <SoftmaxLayer 'out'>]
Connections:
[<FullConnection 'FullConnection-4': 'hidden0' -> 'out'>, <FullConnection   'FullConnection-5': 'bias' -> 'out'>, <FullConnection
'FullConnection-6': 'bias' -> 'hidden0'>, <FullConnection 'FullConnection-7': 'in' -> 'hidden0'>]
于 2012-02-12T11:37:35.487 に答える