Nous expliquerons comment effectuer une vérification à l'aide du modèle et des données de test formés dans Pylearn 2.
Les données de test peuvent être lues à partir du module pylearn2.datasets ou du fichier pkl. Après lecture, vous pouvez vous référer à la valeur d'entrée dans data.X et à la valeur de sortie dans data.y.
Lors de la lecture des ensembles de données MNIST à partir du module pylearn2.datasets:
from pylearn2.datasets import mnist
data = mnist.MNIST(which_set="train")
Lors de la lecture d'un fichier pkl:
import pickle
data = pickle.load(open("path/to/test_dataset.pkl"))
Le modèle après l'entraînement est un fichier pkl et vous pouvez le lire.
import pickle
model= pickle.load(open("path/to/model.pkl"))
Créez une fonction pour calculer la valeur prévue. Vous pouvez obtenir la valeur prédite en générant la fonction ano à l'aide de la méthode fprop du modèle et en transmettant la valeur d'entrée à cette fonction. Cependant, l'espace peut différer entre l'entrée fprop et l'entrée du jeu de données, utilisez donc Space # format_as pour effectuer la conversion. La fonction générée peut calculer la valeur prévue pour plusieurs valeurs d'entrée à la fois. La valeur prévue est calculée plusieurs fois, car si vous la calculez en une seule fois, vous risquez de manquer de mémoire. La fonction suivante prend le X de l'ensemble de données comme entrées et le modèle comme modèle.
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
Dans le cas de la classification statistique, elle peut être agrégée comme suit. Transmettez la valeur de retour de simulate pour les sorties de la fonction suivante et transmettez y de l'ensemble de données pour les étiquettes. Utilisez l'argmax de numpy pour trouver l'élément qui maximise la sortie et le comparer à y dans l'ensemble de données.
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
Voici un exemple d'utilisation du jeu de données MNIST.
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/
Recommended Posts