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?
Eine bereits decodierte Version des MNIST-Datensatzes finden Sie hier: http://mnist-decoded.000webhostapp.com/ – SomethingSomething