2017-08-30 1 views
0

Ich benutze mehrere Kategorien von Bildern wie Vogel/Katze/Hund/Löwe.Wie kann ich vorhersagen, Testbild ist nicht Katze oder Hund, wenn ich ein anderes Bild von Keras zur Verfügung stellen?

nach Epoche = 40

mein testData.py ist:

from keras.models import load_model 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.models import model_from_json 
import cv2, numpy as np 


np.set_printoptions(precision=4, linewidth=100) 

# -------------Load Trained Model------------------------------ 

model = load_model('onlyModel.h5') 
print('Loaded model from disk') 

# -------------Load and Pre process Test img ---------------- 
img = cv2.resize(cv2.imread('a.jpg'), (150, 150)) 
img = np.reshape(img,[1,150,150,3]) 
array = np.asarray(img, dtype='int32') 
array = array/255 

# --------------------Predictions------------------------------ 
predict = model.predict(array) 
classes = model.predict_classes(array)    

print('Prediction is = ', predict) 
print('predict_class is = ',classes) 
# ------------------Result-------------------------------------- 
if classes == 0: 
    print ('It is a Bird') 
elif classes == 1: 
    print ('It is Cat') 
elif classes == 2: 
    print ('It is Dog') 
elif classes == 3: 
    print ('It is Lion')  
else: 
    print ('N/A') 

# ------------------------------------------------ 

korrekt Gibt ausgegeben, wenn ich Bild Hund bieten:

enter image description here

Aber dieses doesn Vorhersage Löwe Bild?

Bitte korrigieren Sie meine Code-Fehler, falls vorhanden. Ich bin neu in diesem Bereich. Schlage auch den bestmöglichen Ansatz vor.

+0

Dies ist keine Programmierfrage, siehe https://stats.stackexchange.com/ für allgemeine Fragen zum Maschinellen Lernen. –

+0

Verwenden Sie immer noch binäre Kreuzentropie? Sie sollten zur kategorischen Kreuzentropie wechseln, mit einer dritten Klasse: 'Andere' und einen 3-dimensionalen Zielvektor erstellen, der alle drei Kategorien widerspiegelt. – McLawrence

+0

Also, was meinst du mit 'alles was ich bekomme ist nur 0 & 1'? Die Verwendung der Kreuzentropie sollte ein kontinuierliches Spektrum von Ausgaben ergeben, die als etwas wie normalisierte Wahrscheinlichkeiten für jede Klasse interpretiert werden können. Weitere Informationen finden Sie im Abschnitt über den [softmax classifier] (http://cs231n.github.io/linear-classify/). Können Sie bitte den Teil Ihres Codes hinzufügen, in dem Sie Ihr Modell definieren und mit dem Training beginnen? – McLawrence

Antwort

2

Scheint mir, dass Sie Ihr Modell mit nur Katze und Hund trainiert haben, die kategorische Variablen sind und durchaus möglich, dass Sie ihr numerisches Äquivalent benutzten. Sie sollten Ihr Dataset und Modell aktualisieren, um Dinge einzuschließen, die weder Katze noch Hund sind.

+0

Ich sehe. Bitte überprüfe meinen Code. Ich wechselte von Binary_crossentropy zu Categorical_crossentropy. Hinzugefügt Lion Bilder in separaten Zug und Validation-Ordner, aber für jedes Bild sagt es 0 Klasse, aber nicht andere ?? – ITechOasis

1

Es scheint, dass Sie nur Feature-Skalierung durchführen, wenn Sie das Modell trainieren. rescale=1./ 255,, aber Sie haben nicht dasselbe getan, wenn Sie das Modell zur Erkennung eines Löwenbildes machen. der Eingang wäre viel größer [0,255], sollten Sie diese Code nach umformen das Bild hinzufügen:

array = np.asarray(image, dtype='int32') 
    array = array/255 

Wenn es nicht funktioniert, können Sie prüfen, ob Ihr Modell übermütig ist, sehen Overfitting in classifiers leads to overconfident predictions, versuchen Regularisierungsterm hinzufügen du modellierst.

Wünschen Sie es hilft.

+0

Ich habe dies in meinem testData.py aber das gleiche Ergebnis versucht. – ITechOasis

+1

Sie müssen das "Array" anstelle des IMG in die Vorhersagefunktion einfügen. Stellen Sie sicher, dass alle Elemente der Eingabe kleiner als +1 sind. BTW, wie groß ist dein Zugset? –

+0

Danke Ich habe den Code aktualisiert. Ich verstehe das nicht "Stellen Sie sicher, dass alle Elemente der Eingabe kleiner als +1 sind." ? Der Zugdatensatz enthält 46 Bilder in jeder Kategorie [Bar, Katze, Hund, Löwe]. Ich bezweifle, dass dies ein Etikett oder weniger Dataset sein könnte. TestData.py sagt nun cat und dog korrekt voraus, aber für zwei weitere Kategorien zeigt es hund als Vorhersageklasse an. – ITechOasis

Verwandte Themen