Подтвердить что ты не робот

Pybrain: как распечатать сеть (узлы и веса)

наконец мне удалось обучить сеть из файла:) Теперь я хочу напечатать узлы и веса, особенно веса, потому что я хочу обучить сеть с помощью pybrain, а затем реализовать NN в другом месте, которое будет использовать его.

Мне нужен способ печати слоев, узлов и веса между узлами, чтобы я мог легко его реплицировать. До сих пор я вижу, что я могу получить доступ к слоям, используя n ['in'], например, а затем, например, могу:

  

реж (п [ 'в'])     [' класс', ' delattr', ' dict', ' doc', ' ',' getattribute ',' хеш ',' init ',' модуль ', " новый", " уменьшить", " сокращение_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 ',' sequential ',' setArgs ',' setName ',' shift ',' whichNeuron ']

  

но я не вижу, как я могу получить доступ к весам здесь. Существует также атрибут params, например, моя сеть имеет 2 4 1 с предубеждением, и в ней говорится:

  

n.params     массив ([- 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, 3.01359547])

  

Трудно сказать, что это такое, по крайней мере с весом соединяет узлы. Это все, что мне нужно.

4b9b3361

Ответ 1

Существует множество способов доступа к внутренним компонентам сети, а именно через список "модулей" или словарь "соединений". Параметры хранятся в этих соединениях или модулях. Например, следующая информация должна печатать всю эту информацию для произвольной сети:

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)

Если вам требуется нечто более мелкозернистое (на уровне нейронов вместо уровня слоя), вам придется дополнительно разложить эти векторы параметров - или, альтернативно, построить свою сеть из однонейронных слоев.

Ответ 2

Попробуй, это сработало для меня:

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

Ответ 3

Может быть, это помогает (PyBrain для 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'>]