2017-07-12 4 views
1

私はKerasで画像分類器を訓練し、私は実際に私は、コードを使用しています、このモデルを使用して別の画像を予測しようとしている時にコード今Kerasで保存されたモデルを使って単一の画像を予測して分類する方法は?

model.save('model1.h5')

でモデルを保存することになった

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) 

と私は私が使用

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

画像がグレーにすべてだったというエラーを取得しますスケールモードでは、3を1に変更する必要があることを理解していますが、このコードでどのように確認できないのでしょうか?私は画像を訓練したときにも

は、私が

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

を設定するが、私はそれを再スケールするためにコードを配置する場所、それがさえも、私は設定

を必要としていた場合、私は、正確にはわかりません

batch_size = 16

と私は

を置く予測するコードで参照

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

また、batch_sizeを16に変更する必要がありますか?それとも、10時にそれを残しますか?

ありがとうございました!まず

+0

まず、RGBからグレースケールへのあなたのイメージを変更する必要があり、あなたはそのために 'opencv'または' skimage'を使用することができ、その後、それをあなたのモデルに渡す – Nain

答えて

1

、ちょうどこのようgrayscale=Trueを追加グレースケールモードで画像をロードする:

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

、あなたは、単に255.xを分割することで、それを再スケールすることができますnumpyの配列にimgを変換した後。

第3に、batch_sizeパラメータは、計算が行われるバッチの大きさを示します。 1つの画像に対して予測を行うので、あなたが定義するものは何であるかはまったく問題ありません。ここでKeras documentationbatch_size推論のためにこう言われる、

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).

最後に、あなたが推論を作るためにそれをロードするときに、モデルをコンパイルする必要はありません。 model.compile(...)を安全に削除できます。

0

多分、ここにエラーがあります。

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

あなたは訓練されたモデルでは(64、64)としてtarget_sizeしている場合。予測時の

ターゲットサイズは(64、64)ことはない(img_width、img_height)

関連する問題