1
votes

Apprentissage profond et réseau de neurones

from keras.models import load_model
import pickle
import cv2
import os
import matplotlib.pyplot as plt
from keras import backend as k


new_model = load_model('model_name.h5')
lb = pickle.loads(open("Label_Binarizer", "rb").read())

dirName = "Other_than_class"
listOfFile = os.listdir(dirName)



# Iterate over all the entries
for entry in listOfFile:
    # Create full path
    fullPath = os.path.join(dirName, entry)
    # If entry is a directory then get the list of files in this 
    directory
    image = cv2.imread(fullPath)
    output = image.copy()
    image = cv2.resize(image, (32, 32))

    # scale the pixel values to [0, 1]
    image = image.astype("float") / 255.0

    # check to see if we should flatten the image and add a batch
    # dimension
    image = image.flatten()
    image = image.reshape((1, image.shape[0]))


    # preds = new_model.predict(image)
    preds = new_model.predict(image.reshape(1, 32, 32, 3))
    print(preds[0])

    k.clear_session()

    # find the class label index with the largest corresponding 
    probability
    i = preds.argmax(axis=1)[0]
    label = lb.classes_[i]


    plt.grid(False)
    plt.imshow(output)
    plt.xlabel("Actual: " + str(entry))
    plt.title("Prediction: " + str(preds[0][i] * 100)+"  "+str(label))
    plt.show()

2 commentaires

Pouvez-vous partager le code que vous utilisez pour faire la prédiction?


Si vous prédisez la probabilité, vous pouvez définir une valeur seuil au-dessus de laquelle les résultats doivent être valides, sinon ils seront marqués comme autres.


3 Réponses :


1
votes

Mais quand je le prédis pour house.jpg ou laptop.jpg ou images autre que ces 3 classes, il prédisait aussi parmi ces 3 classes.

C'est le comportement normal car le réseau de neurones de la dernière couche

model.add(Dense(3, activation="softmax"))

renvoie des probabilités pour chaque classe de votre problème. p >

Donc, si vous utilisez une image laptop.jpg , peut-être qu'elle renvoie trois petites probabilités et la plus grande, elle donne le résultat pour vous.

Puisque vous ' si vous n'utilisez pas d'images portable dans votre ensemble d'entraînement , alors le réseau neuronal n'a aucune idée à ce sujet.

Une approche pourrait définir un seuil de probabilité, disons 50% et si personne parmi ces 3 probabilités ne dépasse ce seuil, alors imprimez Inconnu . p >

En d'autres termes, si vous utilisez une distribution softmax pour votre classification, vous pouvez déterminer quelle est votre max probabilité de base pour les échantillons correctement classés, puis déduire si un nouvel échantillon n'appartient à aucune de vos classes connues si sa probabilité maximale est inférieure à une sorte of threshold.

Cette idée vient d'un article de recherche qui explique cette situation: Une ligne de base pour la détection des exemples mal classés et hors distribution dans les réseaux de neurones


2 commentaires

Il faut mentionner que les probabilités de softmax sont toujours égales à 1. Softmax est également une fonction conçue pour donner une probabilité très élevée à la classe la plus probable, ce qui rend difficile la recherche d'un bon seuil.


Merci monsieur pour les conseils et le temps. Mais la prédiction me donne une précision de plus de 80% pour les images autres que celles de classe. Existe-t-il une autre approche pour résoudre ce problème.



0
votes

Votre problème est que votre réseau n'a que trois options ("chat", "chien" ou "fleur").

La meilleure façon de procéder ici est d'ajouter une quatrième option ("Inconnu").

Par conséquent, vous devrez ajouter des images aléatoires à vos données d'entraînement avec le libellé "Inconnu". Ces images ne doivent bien sûr pas contenir de chats, de chiens ou de fleurs.

De cette façon, votre réseau n'apprend pas seulement à prédire les objets donnés, il apprend également à dire s'il n'y a aucun des objets connus dans l'image.

Un peu plus généralement: Vous devez former votre réseau au plus près de son application pratique .

Dans votre cas: pourquoi avez-vous un house.jpg mais ne l'utilisez pas pour la formation?


0 commentaires

0
votes

Vous faites tout bien. Si vous ne donnez pas à votre réseau la possibilité de choisir une autre classe pour votre ordinateur portable.jpg, le travail que votre modèle essaiera de faire est de comprendre si l'image de cet ordinateur portable a plus en commun avec un chat, un chien ou une fleur. Disons qu'il a avec une fleur, votre réseau peut prédire la fleur de classe pour toute image d'ordinateur portable que vous lui donnez!

Au revoir :)


0 commentaires