【发布时间】:2019-05-17 21:58:40
【问题描述】:
我构建了一个深度卷积神经网络,但我在某个地方搞砸了。我的输出尺寸有点偏差,我不知道为什么。
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)
【问题讨论】:
-
您是否使用
autoencoder.summary()打印模型并查看尺寸?这么少的偏差让我觉得某个地方的填充有问题。 -
好主意!看起来每个 UpSampling2D 层都添加了一个额外的像素。奇怪,你认为是因为我构建模型的方式吗?我之前做过一些,但我使用了“x = UpSampling2D((2, 2))(x)”表示法。
-
符号不应该有什么区别(我认为)。这是您创建的模型,还是您可以检查尺寸的已发布模型?
-
我想这是对我一路上发现的东西的改编。非常基本的 CNN,只是摆弄了尺寸。没有可立即查找的出版物。
-
听起来你会通过玩弄参数来解决它。
标签: python python-3.x tensorflow keras conv-neural-network