2016-10-12 39 views
1

我在Keras中邁出第一步,掙扎着圖層的尺寸。我目前正在構建一個我想用MNIST數據集進行訓練的卷積自動編碼器。不幸的是,我似乎無法得到正確的維度,而且我很難理解我的錯誤在哪裏。構建卷積自動編碼器時的尺寸錯誤

我的模式是建立通過:

def build_model(nb_filters=32, nb_pool=2, nb_conv=3): 
    input_img = Input(shape=(1, 28, 28)) 

    x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img) 
    x = MaxPooling2D((2, 2), border_mode='same')(x) 
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x) 
    x = MaxPooling2D((2, 2), border_mode='same')(x) 
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x) 
    encoded = MaxPooling2D((2, 2), border_mode='same')(x) 

    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded) 
    x = UpSampling2D((2, 2))(x) 
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x) 
    x = UpSampling2D((2, 2))(x) 
    x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x) 
    x = UpSampling2D((2, 2))(x) 
    decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x) 

return Model(input_img, decoded) 

和數據使用檢索:

def load_data(): 
    (x_train, _), (x_test, _) = mnist.load_data() 

    x_train = x_train.astype('float32')/255. 
    x_test = x_test.astype('float32')/255. 
    x_train = np.reshape(x_train, (len(x_train), 1, 28, 28)) 
    x_test = np.reshape(x_test, (len(x_test), 1, 28, 28)) 
    return x_train, x_test 

正如你看到的,我想正常化圖像的黑白顯示它們,並簡單地訓練自動編碼器以便能夠恢復它們。

下面你可以看到,我發現了錯誤:

回溯(最近通話最後一個):文件 「C:/用戶//文件/ GitHub上/主/科研/ research_framework /實驗。 PY」, 線46,在 回調= [EarlyStopping(耐性= 3)])文件 「C:\用戶\應用程序數據\本地\連續\ Anaconda2 \ lib中\站點包\ keras \發動機\ training.py」,文件「C:\ Users \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ keras \ engine \ training.py」, line 978,in _standardize_user_data exception_prefix ='模型目標的)文件 「C:\用戶\應用程序數據\本地\連續\ Anaconda2 \ lib中\站點包\ keras \發動機\ training.py」, 線111,在standardize_input_data STR(array.shape) )異常:檢查模型目標時出錯:期望的convolution2d_7具有形狀(無,8,32,1),但獲得具有形狀(60000L,1L,28L,28L)的陣列 總參數:8273

處理完成退出代碼1

你能幫我解決這個錯誤嗎?除了Keras網站之外,有沒有關於建立模型和處理這類問題的材料?

乾杯

回答

2

看起來像您的輸入形狀不正確。嘗試改變(1,28,28)到(28,28,1),看看它是否適合你。有關解決問題的更多詳細信息和其他選項,請參閱the answer to another question

1

的原因是,當我在keras.json改變了我的後臺配置,我沒有改變圖像dimanesion,所以它仍然設置爲tensorflow。

將其更改爲:

{ 
    "image_dim_ordering": "th", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "theano" 
} 

的伎倆。