我在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
正如你所看到的,我正试图将图像规范化,以黑白显示它们,并简单地训练一个自动编码器来恢复它们。
下面你可以看到我得到的错误:
你能帮我破译这个错误吗?除了Keras网站之外,有没有关于构建模型和处理这类问题的材料?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
欢呼
看起来您的输入形状不正确。尝试将(1,28,28)更改为(28,28,1),看看是否适合您。要了解更多细节和其他解决问题的方法,请参考另一个问题的答案。
原因是,当我在keras中更改后端配置时。json,我没有改变图像的尺寸,所以它仍然被设置为tensorflow。
更改为:
{
"image_dim_ordering": "th",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}