problem using convolutional autoencoder for 2d data

Viewed 107

I want to train an autoencoder for the purpose of gpr investigations. The input data dimension is 149x8.However, While i am trying deep autoencoder it works fine

input_img = Input(shape=(8,))

encoded1 = Dense(8,  activation='relu')(input_img)
encoded2 = Dense(4,  activation='relu')(encoded1)
encoded3 = Dense(2,  activation='relu' )(encoded2)


decoded1 = Dense(2,  activation='relu' )(encoded3)
decoded2 = Dense(4,  activation='relu')(decoded1)
decoded3 = Dense(8,  activation='relu' )(decoded2)
decoded = Dense(8, activation='linear')(decoded3)
                
autoencoder = Model(input_img, decoded)
sgd = optimizers.Adam(lr=0.001)

autoencoder.compile(optimizer=sgd, loss='mse')

autoencoder.summary()

..................................................

But while trying to use convolutional autoencoder for the same input
it  gives error `ValueError: Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=2`

can anybody suggest me how to overcome this problem.

My code is

input_img = Input(shape=(8,))

x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)


x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
sgd = optimizers.Adam(lr=0.001)

autoencoder.compile(optimizer=sgd, loss='mse')

autoencoder.summary()
1 Answers

Wrong Input Shape:

This is because we are passing the input shape of (8,) and 1 extra dimension added by TensorFlow for Batch size, so the error message says that it found ndim=3, but the CNN has expected min_ndim=4, 3 for the image size and 1 for the batch size. e.g.

input_shape=(number_of_rows, 28,28,1)
Related