def build_autoencoder(input_shape, code_length=256): input_img = keras.Input(shape=input_shape) x = layers.Conv2D(16, (3, 3), strides=(2, 2), activation='relu', padding='same')(input_img) x = layers.Conv2D(32, (3, 3), strides=(1, 1), activation='relu', padding='same')(x) x = layers.Conv2D(64, (3, 3), strides=(1, 1), activation='relu', padding='same')(x) x = layers.Conv2D(128, (3, 3), strides=(1, 1), activation='relu', padding='same')(x) x = layers.Flatten()(x) code_layer = layers.Dense(code_length, activation='sigmoid')(x) x = layers.Dense((width // 2) * (height // 2) * 128, activation='relu')(code_layer) x = layers.Reshape((width // 2, height // 2, 128))(x) x = layers.Conv2DTranspose(128, (3, 3), strides=(2, 2), activation='relu', padding='same')(x) x = layers.Conv2DTranspose(64, (3, 3), strides=(1, 1), activation='relu', padding='same')(x) x = layers.Conv2DTranspose(32, (3, 3), strides=(1, 1), activation='relu', padding='same')(x) output_img = layers.Conv2DTranspose(1, (3, 3), strides=(1, 1), activation='sigmoid', padding='same')(x) autoencoder = keras.Model(input_img, output_img) return autoencoder