Мне было любопытно, как происходит чтение уже обученной сети (с помощью инструмента 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))
В любом случае, я до сих пор не знаю точный порядок весовмежду слоями ...