Wir werden erklären, wie die Überprüfung anhand der in Pylearn 2 trainierten Modell- und Testdaten durchgeführt wird.
Testdaten können aus dem Modul pylearn2.datasets oder der pkl-Datei gelesen werden. Nach dem Lesen können Sie sich auf den Eingabewert in data.X und den Ausgabewert in data.y beziehen.
Beim Lesen von MNIST-Datensätzen aus dem Modul pylearn2.datasets:
from pylearn2.datasets import mnist
data = mnist.MNIST(which_set="train")
Beim Lesen einer pkl-Datei:
import pickle
data = pickle.load(open("path/to/test_dataset.pkl"))
Das Modell nach dem Training ist eine pkl-Datei, die Sie lesen können.
import pickle
model= pickle.load(open("path/to/model.pkl"))
Erstellen Sie eine Funktion zur Berechnung des vorhergesagten Werts. Sie können den vorhergesagten Wert erhalten, indem Sie die Funktion theano mit der fprop-Methode des Modells generieren und den Eingabewert an diese Funktion übergeben. Der Speicherplatz kann sich jedoch zwischen der fprop-Eingabe und der Dataset-Eingabe unterscheiden. Verwenden Sie daher Space # format_as, um die Konvertierung durchzuführen. Die generierte Funktion kann den vorhergesagten Wert für mehrere Eingabewerte gleichzeitig berechnen. Der vorhergesagte Wert wird mehrmals berechnet. Wenn Sie alles auf einmal berechnen, geht Ihnen möglicherweise der Speicher aus. Die folgende Funktion verwendet das X des Datensatzes als Eingabe und das Modell als Modell.
import theano
from pylearn2.space import VectorSpace
...
def simulate(inputs, model):
space = VectorSpace(inputs.shape[1])
X = space.get_theano_batch()
Y = model.fprop(space.format_as(X, model.get_input_space()))
f = theano.function([X], Y)
result = []
batch_size = 100
for x in xrange(0, len(inputs), batch_size):
result.extend(f(inputs[x:x + batch_size]))
return result
Im Falle einer statistischen Klassifizierung kann sie wie folgt aggregiert werden. Übergeben Sie den Rückgabewert von simulate an die Ausgaben der folgenden Funktion und übergeben Sie y des Datasets an Labels. Verwenden Sie den Argmax von numpy, um das Element zu finden, das die Ausgabe maximiert, und vergleichen Sie es mit y im Datensatz.
import numpy as np
...
def count_correct(outputs, labels):
correct = 0;
for output, label in zip(outputs, labels):
if np.argmax(output) == label:
correct += 1
return correct
Hier ist ein Beispiel für die Verwendung des MNIST-Datasets.
import pickle
from pylearn2.datasets import mnist
model = pickle.load(open("path/to/model.pkl"))
data = mnist.MNIST(which_set="test")
predicts = simulate(data.X, model)
correct = count_correct(predicts, data.y)
print "{} / {}".format(correct, len(data.X))
http://fastml.com/how-to-get-predictions-from-pylearn2/