2016-12-27 74 views
1

我從Keras筆者就在這裏測試的卷積的自動編碼: https://blog.keras.io/building-autoencoders-in-keras.htmlKeras卷積自動編碼器不工作

但我有這樣的問題:

Exception: Error when checking model target: expected convolution2d_7 to have shape (None, 8, 32, 1) but got array with shape (60000, 1, 28, 28) 

我準確的,我已經設置好的最後一個conv層中的字段'border_mode ='same''。 所以,我真的不從那裏來,從知道.. 以下是摘要:

Layer (type)      Output Shape   Param #   Connected to      
     ==================================================================================================== 
input_1 (InputLayer)    (None, 1, 28, 28)  0            
____________________________________________________________________________________________________ 
convolution2d_1 (Convolution2D) (None, 1, 28, 16)  4048  input_1[0][0]      
____________________________________________________________________________________________________ 
maxpooling2d_1 (MaxPooling2D) (None, 1, 14, 16)  0   convolution2d_1[0][0]    
     ______________________________________________________________________________ ______________________ 
convolution2d_2 (Convolution2D) (None, 1, 14, 8)  1160  maxpooling2d_1[0][0]    
____________________________________________________________________________________________________ 
maxpooling2d_2 (MaxPooling2D) (None, 1, 7, 8)  0   convolution2d_2[0][0]    
____________________________________________________________________________________________________ 
convolution2d_3 (Convolution2D) (None, 1, 7, 8)  584   maxpooling2d_2[0][0]    
____________________________________________________________________________________________________ 
maxpooling2d_3 (MaxPooling2D) (None, 1, 4, 8)  0   convolution2d_3[0][0]    
____________________________________________________________________________________________________ 
convolution2d_4 (Convolution2D) (None, 1, 4, 8)  584   maxpooling2d_3[0][0]    
____________________________________________________________________________________________________ 
upsampling2d_1 (UpSampling2D) (None, 2, 8, 8)  0   convolution2d_4[0][0]    
____________________________________________________________________________________________________ 
convolution2d_5 (Convolution2D) (None, 2, 8, 8)  584   upsampling2d_1[0][0]    
____________________________________________________________________________________________________ 
upsampling2d_2 (UpSampling2D) (None, 4, 16, 8)  0   convolution2d_5[0][0]    
____________________________________________________________________________________________________ 
convolution2d_6 (Convolution2D) (None, 4, 16, 16)  1168  upsampling2d_2[0][0]    
____________________________________________________________________________________________________ 
upsampling2d_3 (UpSampling2D) (None, 8, 32, 16)  0   convolution2d_6[0][0]    
______________________________________________________________________________ ______________________ 

convolution2d_7 (Convolution2D) (None, 8, 32, 1)  145    

upsampling2d_3[0][0]    
==================================================================================================== 
Total params: 8273 
____________________________________________________________________________________________________ 
+0

此問題可能是以下情況的重複:http://stackoverflow.com/questions/39848466/tensorflow-keras-convolution2d-valueerror-filter-must-not-be-larger-than-t?noredirect=1#comment67013494_39848466 –

+0

嗨, 我看到這個線程,的確,dim_ordering需要更改爲theano dim。 (1,x,x) 但是,問題保持不變,現在,網絡期望(1,28,28),但得到(1,32,32) 我明白這是因爲最後一個upsampling層,但是最後一個帶3x3大小過濾器的conv應該安排不? –

回答

3

終於找到了答案。 我認爲本教程的創建者使用32x32 MNIST圖像而不是28x28進行了測試。

因爲,當添加到最後一個conv layer border_mode ='same'時,您將得到一個輸出形狀(32,32,1) 因此,要獲得良好的輸出(28,28,1),您需要將border_mode ='valid'添加到前一個conv層。

總結: 將尺寸排序更正爲28x28x1而不是1x28x28。 然後將邊框模式添加到最後一個conv層 最後添加對最後一個conv層有效的邊框模式。

希望這會有所幫助。