I am working on an autoencoder model. My dataset contains images of shape (256,256,4). I changed them to grayescale before inputting them into the model while training.
My label dataset has images of shape (256,256,1).
I wrote the code:
input_img = keras.Input(shape=(28, 28, 1))
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
# At this point the representation is (7, 7, 32)
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = keras.Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
The model.summary() is:
Model: "functional_10"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_12 (InputLayer) [(None, 28, 28, 1)] 0
_________________________________________________________________
conv2d_44 (Conv2D) (None, 28, 28, 32) 320
_________________________________________________________________
max_pooling2d_24 (MaxPooling (None, 14, 14, 32) 0
_________________________________________________________________
conv2d_45 (Conv2D) (None, 14, 14, 32) 9248
_________________________________________________________________
max_pooling2d_25 (MaxPooling (None, 7, 7, 32) 0
_________________________________________________________________
conv2d_46 (Conv2D) (None, 7, 7, 32) 9248
_________________________________________________________________
up_sampling2d_14 (UpSampling (None, 14, 14, 32) 0
_________________________________________________________________
conv2d_47 (Conv2D) (None, 14, 14, 32) 9248
_________________________________________________________________
up_sampling2d_15 (UpSampling (None, 28, 28, 32) 0
_________________________________________________________________
conv2d_48 (Conv2D) (None, 28, 28, 1) 289
=================================================================
Total params: 28,353
Trainable params: 28,353
Non-trainable params: 0
As you can see, the input shape is (28,28,1) and the output shape will be that too. That is why I also resized the images.
However, I am looking for a model that gets inputs of shape (256,256,1) and gives outputs of the same shape so that the model is compatible with my datasets. Also, I need higher quality output.
Changing the input shape of this code from (28,28,1) to (256,256,1) does not give the output shape as (256,256,1), rather it is (252,252,1). I am having an intuition why it is, but if someone can explain...
Can someone help me with the code I am looking for? Thanks.
question from:
https://stackoverflow.com/questions/65870218/how-to-create-an-autoencoder-model-where-the-input-shape-output-shape