Проблема глубокого сверточного автоэнкодера - слишком большое измерение кодирования - PullRequest
2 голосов
/ 08 июня 2019

Я недавно построил сверточный автоэнкодер, на котором я построил строп других сетей.Я только сейчас понял, что совершил фундаментальную ошибку (должен был увидеть и раньше).Я думал, что мой закодированный слой (т. Е. Выходные данные слоя maxpooling, помеченного как «кодировщик», см. Ниже) имеют размеры «encoding_dim».Тем не менее, это гораздо больше, чем я думал.Я хотел 144, но я получил 144 x 12 x 12 (что на самом деле больше измерений, чем ввод: 48x48x3).

Это код для автоматического кодера:

Архитектура

input_shape = (image_dim, image_dim, 3)

# Build model
autoencoder = Sequential()
autoencoder.add(Conv2D(encoding_dim, (3, 3), padding='same', activation='relu', input_shape=input_shape,
                       kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())
autoencoder.add(MaxPooling2D((2, 2), padding='same'))

autoencoder.add(Conv2D(encoding_dim, (3, 3), padding='same', activation='relu',
                       kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())
autoencoder.add(MaxPooling2D((2, 2), padding='same', name='encoder'))

autoencoder.add(Conv2D(encoding_dim, (3, 3), padding='same', activation='relu',
                       kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())
autoencoder.add(UpSampling2D((2, 2)))

autoencoder.add(Conv2D(encoding_dim, (3, 3), padding='same', activation='relu',
                       kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())
autoencoder.add(UpSampling2D((2, 2)))

autoencoder.add(Conv2D(3, (10, 10), padding='same', activation='sigmoid',
                       kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())

И это сводка модели (image_dim - 48 -> изображения размером 48x48x3, тусклая кодировка 144):

Сводка модели

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 48, 48, 144)       4032      
_________________________________________________________________
batch_normalization_1 (Batch (None, 48, 48, 144)       576       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 24, 24, 144)       0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 24, 24, 144)       186768    
_________________________________________________________________
batch_normalization_2 (Batch (None, 24, 24, 144)       576       
_________________________________________________________________
encoder (MaxPooling2D)       (None, 12, 12, 144)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 12, 12, 144)       186768    
_________________________________________________________________
batch_normalization_3 (Batch (None, 12, 12, 144)       576       
_________________________________________________________________
up_sampling2d_1 (UpSampling2 (None, 24, 24, 144)       0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 24, 24, 144)       186768    
_________________________________________________________________
batch_normalization_4 (Batch (None, 24, 24, 144)       576       
_________________________________________________________________
up_sampling2d_2 (UpSampling2 (None, 48, 48, 144)       0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 48, 48, 3)         43203     
_________________________________________________________________
batch_normalization_5 (Batch (None, 48, 48, 3)         12        
=================================================================
Total params: 609,855
Trainable params: 608,697
Non-trainable params: 1,158

Это поставило меняи в других сетях, поэтому мне нужно настроить архитектуру и все переобучить.

Кто-нибудь объяснит мне, где я ошибся, и, что более важно, как я могу настроить фильтры/ kernels, чтобы убедиться, что мой кодированный слой действительно имеет размеры 'encoding_dim'?

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