Python 2.7 PyBrain实验的精确重复性

Python 2.7 PyBrain实验的精确重复性,python-2.7,neural-network,pybrain,Python 2.7,Neural Network,Pybrain,pybrain中应设置哪些参数,以确保在使用如下代码所示的神经网络模块时精确复制结果 对于每个新运行,尽管随机种子设置为相同的值,但输出不同。每次运行的权重和偏差也相同(由于np.random.seed(0)) 也可以使用net.\u setParameters()设置权重和偏差,但采用这种方法时,结果也不同 #!/usr/bin/python #Python 2.7 from __future__ import division import numpy as np from pybrain

pybrain中应设置哪些参数,以确保在使用如下代码所示的神经网络模块时精确复制结果

对于每个新运行,尽管随机种子设置为相同的值,但输出不同。每次运行的权重和偏差也相同(由于
np.random.seed(0)

也可以使用
net.\u setParameters()
设置权重和偏差,但采用这种方法时,结果也不同

#!/usr/bin/python
#Python 2.7

from __future__ import division
import numpy as np
from pybrain.structure import SigmoidLayer, LinearLayer, TanhLayer
from pybrain.datasets import SupervisedDataSet 
from pybrain.supervised.trainers import BackpropTrainer 
from pybrain.tools.shortcuts import buildNetwork

np.random.seed(0)
net = buildNetwork(1,2,1,hiddenclass=SigmoidLayer,outclass=LinearLayer,bias=True)

N = 10
t = np.arange(0,N,1)/N
x = np.cos(2*np.pi*0.1*t)
y = np.cos(2*np.pi*0.1*t)

ds = SupervisedDataSet(1, 1)
for c in range(N):
 ds.addSample(x[c], y[c])

#net._setParameters(np.random.normal(0,1,(len(net.params))))
#net._setParameters(np.array([1.0]*len(net.params)))
trainer = BackpropTrainer(net, ds)
print 'NN parameters after setup:'
print net.params

for c in range(2):
 e1 = trainer.train()
 print 'Epoch %d Error: %f'%(c,e1)
print 'NN parameters after training:'
print net.params

p=np.zeros(N)
for c in range(N):
 p[c] = net.activate([x[c]])

err = np.sum((y-p)**2)/N
print 'Prediction error = %2.4f'%err
连续两次运行的代码输出:

运行1:

NN parameters after setup:
[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799 -0.97727788
  0.95008842]
Epoch 0 Error: 0.258780
Epoch 1 Error: 0.149163
NN parameters after training:
[ 1.63888191  0.40916677  0.97224621  2.24929727  1.8615028  -1.09298541
  0.83265293]
Prediction error = 0.2179
运行2:

NN parameters after setup:
[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799 -0.97727788
  0.95008842]
Epoch 0 Error: 0.258757
Epoch 1 Error: 0.148765
NN parameters after training:
[ 1.6384432   0.40916969  0.97225458  2.24931834  1.86149186 -1.09343599
  0.83221073]
Prediction error = 0.2167
显然,在这两种情况下,训练前的神经网络参数是相同的。训练后,神经网络参数不同(因此训练期间的预测结果和误差也不同)