Python Pybrain前馈神经网络训练错误完全卡住
嘿,伙计们,我的pybrain代码需要一些帮助。一切都很好,但在第一次训练后,训练错误不会下降。事实上,它只是停留在13.3484055174。我已经多次检查我的代码,并将其与其他示例进行比较,但我始终遇到相同的问题。我也尝试过改变隐藏单位的数量、学习率、动量和权重衰减,但都没有效果。我检查了参数,它从[-1到1]开始,然后爆炸到240-250。我想知道是否有人知道为什么它不起作用。我肯定这是一个非常简单的一行,我错过了 我正在研究kaggle 0-9位分类数据集。我已经让randomforest工作了,但我真的想让这个神经网络也工作。任何帮助都会得到极大的感谢Python Pybrain前馈神经网络训练错误完全卡住,python,neural-network,pybrain,feed-forward,Python,Neural Network,Pybrain,Feed Forward,嘿,伙计们,我的pybrain代码需要一些帮助。一切都很好,但在第一次训练后,训练错误不会下降。事实上,它只是停留在13.3484055174。我已经多次检查我的代码,并将其与其他示例进行比较,但我始终遇到相同的问题。我也尝试过改变隐藏单位的数量、学习率、动量和权重衰减,但都没有效果。我检查了参数,它从[-1到1]开始,然后爆炸到240-250。我想知道是否有人知道为什么它不起作用。我肯定这是一个非常简单的一行,我错过了 我正在研究kaggle 0-9位分类数据集。我已经让randomfores
#learn digit classification with a nerual network
import pybrain
from pybrain.datasets import *
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from pybrain.utilities import percentError
import numpy
print "Importing training and test data"
data = numpy.genfromtxt('trainR.csv', delimiter = ',')
data = data[1:]
traindata = data[:(len(data)/2)]
testdata = data[(len(data)/2)+1:]
print "Importing actual data"
actualdata = numpy.genfromtxt('trainR.csv', delimiter = ',')
print "Adding samples to dataset and setting up neural network"
ds = ClassificationDataSet(784, 10, nb_classes = 10)
for x in traindata:
ds.addSample(tuple(x[1:]),tuple(x[0:1]))
ds._convertToOneOfMany( bounds=[0,1] )
net = buildNetwork(784, 100, 10, bias=True, outclass=SoftmaxLayer)
print "Training the neural network"
trainer = BackpropTrainer(net, dataset=ds, momentum = 0.1,
verbose = True, weightdecay = 0.01)
for i in range(3):
# train the network for 1 epoch
trainer.trainEpochs( 1 )
# evaluate the result on the training and test data
trnresult = percentError( trainer.testOnClassData(), [x[0] for x in traindata] )
# print the result
print "epoch: " + str(trainer.totalepochs) + " train error: " + str(trnresult)
print ""
print "Predicting with the neural network"
answerlist = []
for row in testdata:
answer = numpy.argmax(net.activate(row[1:]))
answerlist.append(answer)
tstresult = percentError(answerlist, [x[0] for x in testdata])
print "Test error: " + str(tstresult)
试着改变
ds = ClassificationDataSet(784, 10, nb_classes = 10)
到
我认为ClassificationDataSet
第二个参数是目标的维度,而不是nb_类给出的类数。这取决于数据的组织方式。最好是将每个目标作为每个类的整数输入,然后使用\u convertToOneOfMany()
如果你能提供你的第一个样品,那会很有用的
ds = ClassificationDataSet(784, 1, nb_classes = 10)