2016-12-27 6 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) 

я точно, я уже выставиться поле 'border_mode =' same '' в последнем слое conv. Так что я действительно не знаю, откуда это взялось .. Вот резюме:

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?noredirect1_comment67013494_39848466 –

+0

Привет, Я видел эту тему, действительно, dim_ordering нужно заменить на theano dim. (1, x, x) Но проблема остается прежней, теперь сеть ожидает (1,28,28), но get (1,32,32) Я понимаю, что это связано с последним слоем upsampling, но последний conv с ним фильтр размером 3x3 должен устроить, что нет? –

ответ

3

Наконец нашел ответ. Я думаю, что создатель учебника протестировал его с 32x32 изображениями MNIST, а не 28x28.

Так как при добавлении к последнему конвейеру border_mode = 'same', вы получаете форму вывода (32,32,1) Итак, чтобы получить хороший результат (28,28,1), вам нужно Добавьте border_mode = 'valid' в предыдущий conv-слой.

Подводя итог: Исправьте размерность до 28x28x1 вместо 1x28x28. Затем добавьте режим границы, равный последнему уровню conv И, наконец, добавьте режим границы, действующий до последнего слоя conv.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^