【问题标题】:Deep convolutional neural net architecture gives error in the end. Why?深度卷积神经网络架构最终会产生错误。为什么?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这通常发生在您使用 MaxPooling 进行下采样并且到达高度和宽度不是偶数的层时(采用 H=W 和偶数的简单情况)。

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2015-04-09
      • 2014-08-24
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2020-08-14
      • 2017-10-21
      • 2016-11-05
      相关资源
      最近更新 更多