Python 深卷积神经网络结构最终给出了误差。为什么?

Python 深卷积神经网络结构最终给出了误差。为什么?,python,python-3.x,tensorflow,keras,conv-neural-network,Python,Python 3.x,Tensorflow,Keras,Conv Neural Network,我建立了一个很深的卷积神经网络,但我在某个地方搞砸了。我的输出维度有点偏离,我不知道为什么 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', activatio

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

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)

好吧,算了。基本上,我选择的图像尺寸很差。图像尺寸为214 x 214 x 3,导致我的下采样(MaxPoolig2D层)必须对尺寸进行四舍五入(214->107->54)。向上采样没有这个问题,因此在接近尾声时它不会累加。

当使用MaxPooling向下采样时,通常会发生这种情况,并且到达高度和宽度不是偶数的层(以H=W和偶数为例)。

您是否使用了
autoencoder.summary()
打印模型并查看尺寸?这么少的量让我觉得填充有问题。好主意!看起来每个UpSampling2D层都添加了一个额外的像素。奇怪,你认为这是因为我建立模型的方式吗?我以前做过一些,但是我使用了“x=UpSampling2D((2,2))(x)”符号。这个符号应该不会有什么不同(我认为)。这是您创建的模型,还是您可以检查尺寸的已发布模型?我想这是对我在过程中发现的东西的改编。相当基本的CNN,只是摆弄了一下尺寸。没有可立即查找的出版物。听起来您将通过使用参数来进行排序。