2017-04-02 3 views
1

J'utilise TF.LEARN avec des données mnist. J'ai formé mon réseau de neurones avec une précision de 0,96 mais maintenant je ne sais pas trop comment prédire une valeur.Obtenir des valeurs étranges sur la prédiction de l'ensemble de données MNIST

Voici mon code ..

#getting mnist data to a zip in the computer. 
mnist.SOURCE_URL = 'https://web.archive.org/web/20160117040036/http://yann.lecun.com/exdb/mnist/' 
trainX, trainY, testX, testY = mnist.load_data(one_hot=True) 


# Define the neural network 
def build_model(): 
    # This resets all parameters and variables 
    tf.reset_default_graph() 
    net = tflearn.input_data([None, 784]) 
    net = tflearn.fully_connected(net, 100, activation='ReLU') 
    net = tflearn.fully_connected(net, 10, activation='softmax') 
    net = tflearn.regression(net, optimizer='sgd', learning_rate=0.1, loss='categorical_crossentropy') 
    # This model assumes that your network is named "net"  
    model = tflearn.DNN(net) 
    return model 

# Build the model 
model = build_model() 

model.fit(trainX, trainY, validation_set=0.1, show_metric=True, batch_size=100, n_epoch=8) 

#Here is the problem 
#lets say I want to predict what my neural network will reply back if I put back the send value from my trainX 

the value of trainX[2] is 4

pred = model.predict([trainX[2]]) 
print(pred) 
#What I get is 
[[2.6109733880730346e-05, 4.549271125142695e-06, 1.8098366126650944e-05, 0.003199575003236532, 0.20630565285682678, 0.0003870908112730831, 4.902480941382237e-05, 0.006617342587560415, 0.018498118966817856, 0.764894425868988]] 

ce que je veux est -> 4

Le problème est que je ne suis pas sûr de savoir comment utiliser cette fonction prédire et mettre dans la valeur de trainX pour obtenir une prédiction.

Répondre

0

La prédiction de l'écoulement tensoriel vous donne une sortie probabiliste. Il suffit d'obtenir l'étiquette avec une probabilité maximale de pred pour obtenir la peediction du réseau.

pred = np.argmax(pred, axis=1) 

Ce qui dans ce cas ne sont pas 4, mais 9.

np est le module numpy importés en tant que import numpy as np, mais ne hésitez pas à le remplacer par tf.argmax(pred, 1) d'utiliser le arg de tensorflow à la place.

+0

j'ai eu la réponse en faisant cela pred = model.predict ([trainX [5]]) impression (np.argmax (pred)) Mais merci de me parler de tf.argmax (pred, 1) –

+0

Je pense que je n'étais pas clair avec ma question, je voulais juste savoir comment calculer le numéro d'index, qui est essentiellement en utilisant np.argmax ... Désolé pour la confusion. J'apprécie vraiment la réponse! –

+0

@MasnadNihit Si vous n'avez qu'une prédiction, 'np.argmax' fonctionne pour vous. Si vous en avez plus d'un, vous avez besoin de 'np.argmax (pred, 1)' pour obtenir tous les index pour toutes les prédictions simultanément. –

0

Vous obtenez un 9, ce qui est tout à fait semblable à un 4.

Qu'est-ce model.predict retours est score et alors que la 5ème valeur dans le tableau des résultats (la valeur 5 est 4 car il commence par un zéro) obtient un score relativement élevé (0,26 seconde de haut) - votre modèle donne le dernier chiffre (9) le score le plus élevé - 0,76. Cela signifie simplement que votre classificateur a un peu tort ici - vous devriez donc envisager d'en utiliser un autre ou jouer avec les hyper-paramètres.

+0

Merci benieve! J'ai compris quel était le problème. Voici la solution finale à mon problème pred = model.predict ([trainX [5]]) impression (np.argmax (pred)) –

+0

@benieve, je pense que je n'étais pas clair avec ma question, je voulais juste savoir comment calculer le numéro d'index, qui est essentiellement en utilisant np.argmax ... Désolé pour la confusion. J'apprécie vraiment la réponse! –