我使用以下PyBrain神经网络代码将1添加到给定输入。代码不知何故从不收敛。
我尝试了各种学习率和不同数量的隐藏层,神经元等,没有任何运气。
任何帮助?
import numpy, math
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure import SigmoidLayer, LinearLayer
from pybrain.tools.shortcuts import buildNetwork
net = buildNetwork(1,
100, # number of hidden units
1,
bias = True,
hiddenclass = SigmoidLayer,
outclass = LinearLayer
)
xvalues = numpy.arange(100)
yvalues = (xvalues) + 1
ds = SupervisedDataSet(1, 1)
for x, y in zip(xvalues, yvalues):
ds.addSample((x,), (y,))
print(ds['input'])
print(ds['target'])
trainer = BackpropTrainer(net, ds, verbose=True)
trainer.trainUntilConvergence()
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
y=xvalues
y_lin = [ net.activate([x]) for x in xvalues ]
ax.plot(y, y_lin, 'bo', lw=4)
ax.plot(y, yvalues, 'r^', lw=2)
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()
查看预期值和预测值之间的差异。
奇怪的是,如果我给出10个训练值而不是100个,那么网似乎会收敛。
感谢。