2016-12-01 3 views
0

オブジェクトを認識するように設計されたCNNを作成しました。CNNの要求に一致するようにKerasの画像データを整形する

from keras.preprocessing.image import img_to_array, load_img 

img = load_img('newimage.jpg') 
x = img_to_array(img) 
x = x.reshape((1,) + x.shape) 
scores = model.predict(x, verbose=1) 
print(scores) 

私は取得していますが:

expected convolution2d_input_1 to have shape (None, 3, 108, 192) but got array with shape (1, 3, 192, 108) 

マイモデル:

def create_model(): 
    model = Sequential() 
    model.add(Convolution2D(32, 3, 3, input_shape=(3, img_width, img_height))) 
    model.add(Activation('relu')) 
    model.add(MaxPooling2D(pool_size=(2, 2))) 

    model.add(Convolution2D(32, 3, 3)) 
    model.add(Activation('relu')) 
    model.add(MaxPooling2D(pool_size=(2, 2))) 

    model.add(Convolution2D(64, 3, 3)) 
    model.add(Activation('relu')) 
    model.add(MaxPooling2D(pool_size=(2, 2))) 

    model.add(Flatten()) 
    model.add(Dense(64)) 
    model.add(Activation('relu')) 
    model.add(Dropout(0.5)) 

    model.add(Dense(1)) 
    model.add(Dense(3, activation='softmax')) 

    model.compile(loss='categorical_crossentropy', 
        optimizer='rmsprop', 
        metrics=['accuracy']) 
    return model 

私は、関連する回答やドキュメントを見ますが、再構築する方法についての損失できました予想通りの配列ですか?

+0

'model'定義を表示できますか? –

+0

確かに@WasiAhmadが追加されました –

+0

あなたのコードをチェックしたところ、うまくいきました!下の私の答えを参照してください:) –

答えて

1

私は画像の幅と高さを設定することが問題だと思います。エラーが言うように:

expected convolution2d_input_1 to have shape (None, 3, 108, 192) # expected width = 108 and height = 192 
but got array with shape (1, 3, 192, 108) # width = 192, height = 108 

アップデート:私は小さな変化にあなたのコードをテストし、それが働きました!

私は与えているだけで変更された行:

img_width, img_height = 960, 717 
model.add(Convolution2D(32, 3, 3, input_shape=(img_height, img_width, 3))) 

これは、主な変更点はあるが - input_shape=(img_height, img_width, 3)

私はこのコードを実行するために使用される画像はwidth = 960height = 717でした。答えの一部が間違っていたため、以前の回答を更新しました!そのために残念。

+0

それは、ありがとう! –

関連する問題