2013-02-17 80 views
2

嘿,我需要一些幫助,我的pybrain代碼。一切正常,但訓練後第一次訓練錯誤不會下降。事實上,它恰好停留在13.3484055174處。我已經多次檢查我的代碼並將其與其他示例進行比較,但我始終得到同樣的問題。我也已經嘗試改變隱藏單位的數量,學習速度,勢頭,重量減輕到無濟於事。我檢查了參數,它從[-1到1]開始,然後吹到〜240-250。我想知道是否有人能看到它爲什麼不起作用。我相信這是一個非常簡單的單線程,我錯過了。Pybrain前饋神經網絡訓練錯誤完全卡住

我正在研究kaggle 0-9數字分類數據集。我已經得到了隨機森林的工作,但我真的想讓這個神經網絡工作。任何幫助將不勝感激。

#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) 

回答

3

嘗試改變

ds = ClassificationDataSet(784, 10, nb_classes = 10) 

ds = ClassificationDataSet(784, 1, nb_classes = 10) 

我覺得ClassificationDataSet秒參數是目標的尺寸,而不是這種由nb_classes給出類的數量。這取決於你的數據是如何組織的。最好的辦法是爲每個班級輸入每個目標,然後使用_convertToOneOfMany()

如果您提供了第一個樣本