2016-04-18 10 views
0

Ich versuche, Mnist Daten mit PyBrain zu klassifizieren.PyBrain Mnist Klassifizierung

Im Folgenden finden Sie Code für das Training:

def train_net(self): 

    print("Build network") 
    net = buildNetwork(784, 30, 10, bias=True, hiddenclass=TanhLayer, outclass=SoftmaxLayer) 
    back_trainer = BackpropTrainer(net, learningrate=1) 

    training_dataset = self.get_training_dataset() 

    print("Begin training") 
    time0 = time() 
    err = back_trainer.trainUntilConvergence(dataset=training_dataset, maxEpochs=300, verbose=True) 
    print("Training time is " + str(round(time()-time0, 3)) + " seconds.") 

    return net, err 

def get_training_dataset(self): 
    print("Reading training images") 
    features_train = self.read_images("train-images.idx3-ubyte") 

    print("Reading training labels") 
    labels_train = self.read_labels("train-labels.idx1-ubyte") 

    # view_image(features_train[10]) 
    print("Begin reshaping training features") 
    features_train = self.reshape_features(features_train) 

    print("Create training dataset") 
    training_dataset = ClassificationDataSet(784, 10) 

    for i in range(len(features_train)): 
     result = [0]*10 
     result[labels_train[i]] = 1 
     training_dataset.addSample(features_train[i], result) 

    training_dataset._convertToOneOfMany() 

    return training_dataset 

Und wenn ich Netzwerk an Testdatensatzes aktivieren das Ergebnis wie folgt aussieht:

[ 3.72885642e-25 4.62573440e-64 2.32150541e-31 9.42499004e-16 
    1.33256639e-39 2.30439387e-17 5.16602624e-94 1.00000000e+00 
    1.83860601e-27 1.22969684e-22] 

Wo argmax Wertklasse angibt. Für gegebene Liste ist Argmax 7.

Aber warum? Wenn ich Datensätze vorbereite, kann man sehen, wo ich entsprechendes Neuron brauche, um mir 1 zu geben, und andere müssen Nullen sein. Also habe ich [0, 0, 0, 0, 0, 0, 0, 1, 0, 0] erwartet.

Ich habe gelesen, dass _convertToOneOfMany-Funktion Ausgabe so machen kann. Also habe ich es hinzugefügt, aber nichts hat sich geändert. Was ich falsch mache?

+0

Eine bereits decodierte Version des MNIST-Datensatzes finden Sie hier: http://mnist-decoded.000webhostapp.com/ – SomethingSomething

Antwort

1

Es ist nichts falsch, werden Sie fast nie wieder die genauen Ergebnisse, die Sie aufgrund einer Vielzahl von Gründen geschult, so dass Sie sollten glücklich sein, wenn der Ausgang ist „ausreichend“ in der Nähe der richtigen Antwort (was in dem von Ihnen geposteten Beispiel steht).

+0

Entschuldigung, ich verstehe. Du hattest Recht. –