【问题标题】:Wrong dimensions when building convolutional autoencoder构建卷积自动编码器时尺寸错误
【发布时间】:2016-10-12 11:50:24
【问题描述】:

我正在 Keras 中迈出第一步,并为我的图层尺寸而苦苦挣扎。我目前正在构建一个卷积自动编码器,我想使用 MNIST 数据集进行训练。不幸的是,我似乎无法获得正确的尺寸,而且我很难理解我的错误在哪里。

我的模型是通过以下方式构建的:

def build_model(nb_filters=32, nb_pool=2, nb_conv=3):
    input_img = Input(shape=(1, 28, 28))

    x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
    x = MaxPooling2D((2, 2), border_mode='same')(x)
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
    x = MaxPooling2D((2, 2), border_mode='same')(x)
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
    encoded = MaxPooling2D((2, 2), border_mode='same')(x)

    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
    x = UpSampling2D((2, 2))(x)
    x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
    x = UpSampling2D((2, 2))(x)
    x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x)
    x = UpSampling2D((2, 2))(x)
    decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)

return Model(input_img, decoded)

并使用以下方法检索数据:

def load_data():
    (x_train, _), (x_test, _) = mnist.load_data()

    x_train = x_train.astype('float32') / 255.
    x_test = x_test.astype('float32') / 255.
    x_train = np.reshape(x_train, (len(x_train), 1, 28, 28))
    x_test = np.reshape(x_test, (len(x_test), 1, 28, 28))
    return x_train, x_test

如您所见,我正在尝试对图像进行规范化以黑白显示,并且只是为了训练自动编码器来恢复它们。

您可以在下面看到我遇到的错误:

Traceback(最近一次调用最后一次):文件 "C:/Users//Documents/GitHub/main/research/research_framework/experiment.py", 第 46 行,在 callbacks=[EarlyStopping(patience=3)]) 文件 "C:\Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\keras\engine\training.py", 第 1047 行,合适 batch_size=batch_size) 文件 "C:\Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\keras\engine\training.py", 第 978 行,在 _standardize_user_data exception_prefix='模型目标') 文件 "C:\Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\keras\engine\training.py", 第 111 行,在 standardize_input_data 中 str(array.shape)) 异常:检查模型目标时出错:预期的 convolution2d_7 具有形状 (None, 8, 32, 1) 但得到了数组 带形状(60000L、1L、28L、28L)总参数:8273

进程以退出代码 1 结束

你能帮我解密这个错误吗?除了 Keras 网站,有没有关于构建模型和处理此类问题的资料?

干杯

【问题讨论】:

    标签: python python-2.7 deep-learning keras autoencoder


    【解决方案1】:

    您的输入形状似乎不正确。尝试将 (1,28,28) 更改为 (28,28,1),看看是否适合您。更多细节和解决问题的其他选项,请参考the answer to another question

    【讨论】:

      【解决方案2】:

      原因是我在 keras.json 中更改了后端配置,但没有更改图像尺寸,所以仍然设置为 tensorflow。

      改成:

      {
          "image_dim_ordering": "th", 
          "epsilon": 1e-07, 
          "floatx": "float32", 
          "backend": "theano"
      }
      

      成功了。

      【讨论】:

        猜你喜欢
        • 2019-03-15
        • 2020-08-20
        • 1970-01-01
        • 2020-06-11
        • 2018-11-12
        • 1970-01-01
        • 2017-01-11
        • 2017-11-11
        • 2016-10-12
        相关资源
        最近更新 更多