2

やあみんな私は私のpybrainコードで少し助けが必要です。すべてが正常にロードされますが、最初にトレーニングした後、トレーニングエラーは減少しません。実際、それはちょうど13.3484055174でそこに留まっています。私は自分のコードを何度もチェックして他の例と比較してきましたが、一貫して同じ問題が発生します。また、隠しユニットの数、学習率、勢い、体重減少を無駄に変更しようとしました。パラメータを確認しましたが、[-1から1]で始まり、その後、〜240-250に膨れ上がります。なぜそれが機能しないのか誰かがわかるのだろうかと思っていました。私が見逃しているのは本当にシンプルな1ライナーだと確信しています。

私は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)
4

1 に答える 1

3

変更してみてください

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

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

ClassificationDataSet2番目の引数は、nb_classesによって与えられるクラスの数ではなく、ターゲットの次元だと思います。データがどのように編成されているかによって異なります。最良の方法は、各ターゲットを各クラスの整数として入力してから、_convertToOneOfMany()

最初のサンプルを提供すると便利です

于 2013-02-17T18:46:07.843 に答える