2017-07-12 3 views
1

Ich trainierte ein Bildklassifizierer mit Keras und ich landete das Modell mit dem JetztWie verwende ich ein gespeichertes Modell in Keras, um ein einzelnes Bild vorherzusagen und zu klassifizieren?

model.save('model1.h5')

Code speichern, wenn ich versuche eigentlich ein anderes Bild unter Verwendung dieses Modells vorherzusagen, ich bin mit dem Code

from keras.models import load_model 
from keras.preprocessing import image 
import numpy as np 

# dimensions of our images 
img_width, img_height = 231, 172 

# load the model we saved 
model = load_model('model1.h5') 
model.compile(loss='binary_crossentropy', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 

# predicting images 
img = image.load_img('a.png', target_size=(img_width, img_height)) 
x = image.img_to_array(img) 
x = np.expand_dims(x, axis=0) 

images = np.vstack([x]) 
classes = model.predict_classes(images, batch_size=10) 
print(classes) 

und ich erhalte eine Fehlermeldung,

ValueError: Error when checking : expected conv2d_1_input to have shape (None, 231, 172, 1) but got array with shape (1, 231, 172, 3)

die Bilder, die ich alle benutzen in Grau waren Scale-Modus, so verstehe ich, dass ich die 3 zu einer 1 ändern muss, aber ich bin mir nicht sicher, wie mit diesem Code?

Auch wenn ich die Bilder trainiert, habe ich

train_datagen = ImageDataGenerator(rescale=1./255) 
test_datagen = ImageDataGenerator(rescale=1./255) 

aber ich bin mir nicht ganz sicher, wo ich den Code setzen würde es neu zu skalieren, wenn es auch

auch gebraucht wird, habe ich

batch_size = 16

und ich im Code sehen vorherzusagen ich habe

classes = model.predict_classes(images, batch_size=10)

Sollte ich diese batch_size auch auf 16 ändern? Oder lass es einfach um 10?

Danke nochmal Jungs!

+0

Zuerst Ihr Bild von RGB in Graustufen ändern, können Sie 'opencv' oder' skimage' für das und dann Übergeben Sie es Ihrem Modell – Nain

Antwort

1

Zum einen ein Bild in Graustufen-Modus zu laden, nur grayscale=True wie folgt hinzu:

img = image.load_img('a.png', target_size=(img_width, img_height), grayscale=True) 

Zweitens nach img zu einem numpy Array umgewandelt haben Sie es einfach durch Dividieren x von 255. rescale kann.

Drittens gibt der Parameter batch_size an, wie groß die Stapel sind, in denen die Berechnung durchgeführt wird. Da Sie für ein einzelnes Bild eine Vorhersage treffen, ist es egal, was batch_size Sie definieren. Hier ist, was Keras documentation sagt über batch_size für die Schlußfolgerung:

For inference (evaluate/predict), it is recommended to pick a batch size that is as large as you can afford without going out of memory (since larger batches will usually result in faster evaluating/prediction).

Schließlich gibt es keine Notwendigkeit, das Modell zu erstellen, wenn Sie es laden für Inferenz zu machen. Sie können model.compile(...) sicher entfernen.

0

Vielleicht ist der Fehler hier.

img = image.load_img('a.png', target_size=(img_width, img_height)) 

Wenn target_size as (64, 64) im trainierten Modell ist.

während Vorhersage sollte die Zielgröße (64, 64) und nicht (img_width, img_height)

Verwandte Themen