首页 > 解决方案 > 深度卷积神经网络架构最终会产生错误。为什么?

问题描述

我建立了一个深度卷积神经网络,但我在某个地方搞砸了。我的输出尺寸有点偏,我不知道为什么。

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)

标签: pythonpython-3.xtensorflowkerasconv-neural-network

解决方案


好的,想通了。基本上,我选择的图像尺寸很差。图像尺寸为 214 x 214 x 3,导致我的下采样(MaxPooling2D 层)必须舍入尺寸(214 -> 107 -> 54)。UpSampling 没有这个问题,所以最后没有加起来。


推荐阅读