Сверточные слои для изображений странной формы - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать сверточный автоэнкодер, и набор данных, который я использую, состоит из 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 Ответ

1 голос
/ 20 марта 2020

Вы можете использовать слой ZeroPadding2D или Cropping2D.

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
_________________________________________________________________
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...