Алгоритм и принцип работы автокодера, и почему часть кодера размыта - PullRequest
0 голосов
/ 15 февраля 2019

Пытаясь понять авто-кодеры, я ищу алгоритм авто-кодера и принцип функции авто-кодеров, математические формулы.

В настоящее время я работаю над авто-кодерами и пытаюсь взять кодировщик, выводящийсжатые данные, и я не уверен, что это хороший результат

я в правильном направлении?

output of ecoder

код:

nput_img = Input(shape=(64, 64, 3))

x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)

encoded = MaxPooling2D((2, 2), padding='same')(x)
encoder_mode = Model(input_img, encoded)
x = Conv2D(64, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(64, (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(3, (3, 3), activation='sigmoid', padding='same')(x)
...
autoencoder.fit
...
...
encoded_imgs = autoencoder.predict(X_test)

plt.imshow(encoded_imgs[i])

это кодированный ввод, это должны быть характеристические и сжатые данные?

1 Ответ

0 голосов
/ 15 февраля 2019

Автоэнкодеры используются для кодирования основных функций входных данных.Вы можете думать об этом как об экстракторе функций.Результат будет размытым, потому что при кодировании происходит потеря данных.Принцип состоит в том, чтобы представлять ввод с меньшим количеством данных.

Ваши входные данные 64x64x3 = 12288 пикселей.И ваш кодированный 8x8x64 = 4096.Что составляет 1/3 входных данных.

Подсчет размера в кодировке:

input_img = Input(shape=(64, 64, 3)) # 64x64x3

x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img) # 64x64x32
x = MaxPooling2D((2, 2), padding='same')(x) # 32x32x32
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x) # 32x32x64
x = MaxPooling2D((2, 2), padding='same')(x) # 16x16x64
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x) # 16x16x64

encoded = MaxPooling2D((2, 2), padding='same')(x) # 8x8x64

Таким образом, вы восстанавливаете исходное изображение из 33% его данных.Это довольно впечатляюще и, конечно, будет небольшое размытие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...