2016-12-27 72 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层有效的边框模式。

希望这会有所帮助。