在构建卷积自编码器时错误的维度



我在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:/用户//文档/GitHub/主/研究/research_framework/experiment.py",第46行文件"C:UsersAppDataLocalContinuumAnaconda2libsite-packageskerasenginetraining.py",第1047行,合身文件"C:UsersAppDataLocalContinuumAnaconda2libsite-packageskerasenginetraining.py",第978行,在_standarze_user_data文件"C:UsersAppDataLocalContinuumAnaconda2libsite-packageskerasenginetraining.py",第111行,在standarze_input_data异常:检查模型目标时出错:期望的convolution2d_7具有形状(None, 8,32,1),但得到数组外形(60000L, 1L, 28L, 28L)总参数:8273

进程结束,退出代码1

你能帮我破译这个错误吗?除了Keras网站之外,有没有关于构建模型和处理这类问题的材料?

欢呼

看起来您的输入形状不正确。尝试将(1,28,28)更改为(28,28,1),看看是否适合您。要了解更多细节和其他解决问题的方法,请参考另一个问题的答案。

原因是,当我在keras中更改后端配置时。json,我没有改变图像的尺寸,所以它仍然被设置为tensorflow。

更改为:

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

相关内容

  • 没有找到相关文章

最新更新