卷积层,用于奇形图像

时间:2020-03-20 04:25:55

标签: keras

我正在尝试构建卷积自动编码器,而我正在使用的数据集包含25 x 25张图像。

input_img = Input ( shape = (25 , 25, 1))

layer = input_img
layer = Conv2D (128 , kernel_size =(3 , 3) , activation = 'relu' , padding = 'same')( layer )
layer = MaxPooling2D ( pool_size =(2 , 2) , padding = 'same')( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = MaxPooling2D ( pool_size =(2 , 2) , padding = 'same')( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = Flatten ()( layer )
layer = Dense (32 , activation = 'relu')( layer )
layer = Dense (6)( layer )
encoded = layer

layer = Dense (32 , activation = 'relu')( encoded )
layer = Dense (6272 , activation = 'relu')( layer )
layer = Reshape ((7, 7, 128))( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = UpSampling2D ((2 ,2))( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = UpSampling2D ((2 ,2))( layer )
layer = Conv2D (1, kernel_size =(3 , 3) , padding = 'same')( layer )

autoencoder = Model ( input_img , layer )

但是,当我尝试执行此操作时,会得到以下尺寸:

input_35 (InputLayer)        (None, 25, 25, 1)         0         
_________________________________________________________________
conv2d_208 (Conv2D)          (None, 25, 25, 128)       1280      
_________________________________________________________________
max_pooling2d_72 (MaxPooling (None, 13, 13, 128)       0         
_________________________________________________________________
conv2d_209 (Conv2D)          (None, 13, 13, 128)       147584    
_________________________________________________________________
max_pooling2d_73 (MaxPooling (None, 7, 7, 128)         0         
_________________________________________________________________
conv2d_210 (Conv2D)          (None, 7, 7, 128)         147584    
_________________________________________________________________
flatten_32 (Flatten)         (None, 6272)              0         
_________________________________________________________________
dense_125 (Dense)            (None, 32)                200736    
_________________________________________________________________
dense_126 (Dense)            (None, 6)                 198       
_________________________________________________________________
dense_127 (Dense)            (None, 32)                224       
_________________________________________________________________
dense_128 (Dense)            (None, 6272)              206976    
_________________________________________________________________
reshape_74 (Reshape)         (None, 7, 7, 128)         0         
_________________________________________________________________
conv2d_211 (Conv2D)          (None, 7, 7, 128)         147584    
_________________________________________________________________
up_sampling2d_72 (UpSampling (None, 14, 14, 128)       0         
_________________________________________________________________
conv2d_212 (Conv2D)          (None, 14, 14, 128)       147584    
_________________________________________________________________
up_sampling2d_73 (UpSampling (None, 28, 28, 128)       0         
_________________________________________________________________
conv2d_213 (Conv2D)          (None, 28, 28, 1)         1153      
_________________________________________________________________
reshape_75 (Reshape)         (None, 1, 784)            0         
_________________________________________________________________
activation_14 (Activation)   (None, 1, 784)            0         
_________________________________________________________________
reshape_76 (Reshape)         (None, 28, 28, 1)         0         

我希望输入和输出尺寸完全相同,而且我也不知道为什么不采样层选择(14,14,128)而卷积层选择(13,13,128)。

1 个答案:

答案 0 :(得分:1)

您可以使用ZeroPadding2DCropping2D层。

input_img = Input ( shape = (25 , 25, 1))

layer = input_img
# layer = ZeroPadding(((3,0), (3,0)))( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) , activation = 'relu' , padding = 'same')( layer )
layer = MaxPooling2D ( pool_size =(2 , 2) , padding = 'same')( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = MaxPooling2D ( pool_size =(2 , 2) , padding = 'same')( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = Flatten ()( layer )
layer = Dense (32 , activation = 'relu')( layer )
layer = Dense (6)( layer )
encoded = layer

layer = Dense (32 , activation = 'relu')( encoded )
layer = Dense (6272 , activation = 'relu')( layer )
layer = Reshape ((7, 7, 128))( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = UpSampling2D ((2 ,2))( layer )
layer = Conv2D (128 , kernel_size =(3 , 3) ,activation = 'relu' , padding = 'same')( layer )
layer = UpSampling2D ((2 ,2))( layer )
layer = Conv2D (1, kernel_size =(3 , 3) , padding = 'same')( layer )
layer = Cropping2D(((3,0), (3,0)))( layer )

autoencoder = Model ( input_img , layer )

结果:

Model: "model_8"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_12 (InputLayer)        [(None, 25, 25, 1)]       0         
_________________________________________________________________
zero_padding2d_8 (ZeroPaddin (None, 28, 28, 1)         0         
_________________________________________________________________
conv2d_54 (Conv2D)           (None, 28, 28, 128)       1280      
_________________________________________________________________
max_pooling2d_18 (MaxPooling (None, 14, 14, 128)       0         
_________________________________________________________________
conv2d_55 (Conv2D)           (None, 14, 14, 128)       147584    
_________________________________________________________________
max_pooling2d_19 (MaxPooling (None, 7, 7, 128)         0         
_________________________________________________________________
conv2d_56 (Conv2D)           (None, 7, 7, 128)         147584    
_________________________________________________________________
flatten_9 (Flatten)          (None, 6272)              0         
_________________________________________________________________
dense_37 (Dense)             (None, 32)                200736    
_________________________________________________________________
dense_38 (Dense)             (None, 6)                 198       
_________________________________________________________________
dense_39 (Dense)             (None, 32)                224       
_________________________________________________________________
dense_40 (Dense)             (None, 6272)              206976    
_________________________________________________________________
reshape_9 (Reshape)          (None, 7, 7, 128)         0         
_________________________________________________________________
conv2d_57 (Conv2D)           (None, 7, 7, 128)         147584    
_________________________________________________________________
up_sampling2d_18 (UpSampling (None, 14, 14, 128)       0         
_________________________________________________________________
conv2d_58 (Conv2D)           (None, 14, 14, 128)       147584    
_________________________________________________________________
up_sampling2d_19 (UpSampling (None, 28, 28, 128)       0         
_________________________________________________________________
conv2d_59 (Conv2D)           (None, 28, 28, 1)         1153      
=================================================================
Total params: 1,000,903
Trainable params: 1,000,903
Non-trainable params: 0
_________________________________________________________________
相关问题