这是我的代码:
from pybrain.structure import *
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
fnn = FeedForwardNetwork()
inLayer = LinearLayer(2, name='inLayer')
hiddenLayer = SigmoidLayer(7, name='hiddenLayer0')
outLayer = LinearLayer(1, name='outLayer')
fnn.addInputModule(inLayer)
fnn.addModule(hiddenLayer)
fnn.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
fnn.addConnection(in_to_hidden)
fnn.addConnection(hidden_to_out)
fnn.sortModules()
from pybrain.supervised.trainers import BackpropTrainer
DS = SupervisedDataSet(2,1)
for i in range(100):
for j in range(100):
DS.addSample([i,j], [i*j])
X = DS['input']
Y = DS['target']
dataTrain, dataTest = DS.splitWithProportion(0.8)
xTrain, yTrain = dataTrain['input'], dataTrain['target']
xTest, yTest = dataTest['input'], dataTest['target']
trainer = BackpropTrainer(fnn, dataTrain, verbose = True, learningrate=0.01)
trainer.trainUntilConvergence(maxEpochs=1000)
当我运行此代码时,每个时代都得到total error
。我无法理解它。total error
是什么意思?它看起来有点大。
以下是total error
的一些内容:
Total error: 2421098.90561
Total error: 2421079.7975
Total error: 2419968.22232
Total error: 2423552.04539
Total error: 2423015.61675
答案 0 :(得分:1)
您的程序逻辑存在缺陷。您可能会误解整个神经网络训练的概念以及一个时代。以下几行是您的问题:
for i in range(100):
trainer.trainEpochs( 1 )
您不是在训练网络100个时代,相反,在每次迭代中,您使用一个纪元训练您的网络,然后您停止并从头开始。
你不需要for循环。删除for循环,只需指定您想要100个纪元:
trainer.trainEpochs(100)
您可以将时代视为学习过程中的一次迭代。
您显示的“总错误”告诉我您如何设置网络有问题。使用您正在使用的数据和三层网络时,错误应该不断减少,直到它收敛到一个小值。
这是什么“总错误”?每次训练网络时,网络都在学习如何将输入转换为您提供的输出。 “总误差”是平均重建误差:预期输出减去实际获得的输出(平方),以及所有输入的平均值。