Обучение автоэнкодеру с одинаковыми изображениями - PullRequest
1 голос
/ 23 марта 2020

Я тренирую автоэнкодер с 2000 одинаковыми изображениями. Я ожидаю, что, учитывая, что у автоэнкодера достаточно мощности, потеря приблизится к 0, а точность приблизится к 1 после определенного времени обучения. Вместо этого я вижу быстрое схождение к потерям = 0,07 и точности = 0,76. Уменьшение количества сверточных слоев дало некоторое улучшение. Уменьшение количества ядер на слой увеличило потери. После этого улучшения нет. Мои ожидания неверны? Или что-то не так с моей архитектурой автоэнкодера? Что можно сделать, чтобы сделать практически без потерь автоэнкодер?

input_img = Input(shape=(image_size_x, image_size_y, 1))
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)

x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

Спасибо!

1 Ответ

0 голосов
/ 23 марта 2020

Вам необходимо добавить плотный слой между вашим автоконволюционным кодером и автоконволюционным декодером. Это скрытое представление, также называемое слоем внедрения. Это слой, в котором изображение сжимается. Это «сжатые знания», которые архитектура пытается «изучить».

Для реализации, из этого урока: https://www.tensorflow.org/tutorials/generative/cvae Я бы предложил вам добавить эти строки между кодировщиком и часть декодера:

x = tf.keras.layers.Flatten()(x),
x = tf.keras.layers.Dense(latent_dim + latent_dim)
...