Глубокая сверточная архитектура нейронной сети в конечном итоге дает ошибку. Зачем? - PullRequest
0 голосов
/ 18 мая 2019

Я построил глубокую сверточную нейронную сеть, но где-то запутался.Мои выходные размеры просто немного смещены, и я не могу понять, почему.

encoding_dim = 512   
input_image = Input(shape=train_images.shape[1:]) # (214, 214, 3)

# Build model
autoencoder = Sequential()
autoencoder.add(Conv2D(2*encoding_dim, (12, 12), 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, (12, 12), padding='same', activation='relu',
                           kernel_initializer='random_uniform', bias_initializer='zeros'))
autoencoder.add(BatchNormalization())
autoencoder.add(MaxPooling2D((2, 2), padding='same'))

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

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

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

# Compile
autoencoder.compile(optimizer='adam', loss='mean_squared_error')

Я получаю ошибку:

ValueError: Error when checking target: expected batch_normalization_5 to have shape (216, 216, 3) but got array with shape (214, 214, 3)

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Хорошо, разобрался.Я плохо выбрал размеры изображения, в основном.Размеры изображения были 214 x 214 x 3, в результате чего моя понижающая выборка (слои MaxPooling2D) была вынуждена округлить размеры (214 -> 107 -> 54).У UpSampling такой проблемы не было, поэтому к концу не сложилось.

0 голосов
/ 18 мая 2019

Это обычно происходит, когда вы уменьшаете с помощью MaxPooling и достигаете слоя, где высота и ширина не являются четными числами (возьмите простой случай H = W и четный).

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