2016-12-01 77 views
0

我創建了一個旨在識別對象的CNN。重塑Keras中的圖像數據以符合CNN要求

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

你可以顯示你的「模型」的定義? –

+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

明白了,謝謝! –