我正在尝试训练一个autocoder在下面的代码:
encoder_input = keras.layers.Input(shape=(x_Train.shape[1]), name='img')
encoder_out = keras.layers.Dense(1, activation = "relu")(encoder_input)
encoder = keras.Model(encoder_input, encoder_out, name="encoder")
decoder_input = keras.layers.Dense(602896, activation = "relu")(encoder_out)
decoder_output = keras.layers.Reshape((769, 28, 28))(decoder_input)
opt = keras.optimizers.RMSprop(learning_rate=1e-3)
autoencoder = keras.Model(encoder_input, decoder_output, name = "autoencoder")
autoencoder.summary()
autoencoder.compile(opt, loss='mse')
autoencoder.fit(x_Train, x_Train, epochs=10, batch_size=64, validation_split = 0.1)
但是,它返回错误:"tensorflow :模型是使用输入KerasTensor(type_spec = TensorSpec(shape =(None,28),dtype = tf.float32,name ='img '),name ='img',description ="由层'img'创建")的形状(None,28)构建的,但在具有不兼容形状(None,28,28)的输入上调用了该模型。"
我不知道如何处理这个问题,也不知道如何调整输入的大小。我的x_train是一个大小为[769,28,28]的向量。
有人能帮我处理这个错误吗?
That's the summary
谢谢
2条答案
按热度按时间3qpi33ja1#
自动编码器的输入形状有点奇怪,训练数据的形状为28x28,批处理为769,因此修复应该如下所示:
cygmwpex2#
问题(除了输入层(必须是
shape=(28, 28)
,输出层(必须是(28,28)
,如Edwin Cheong 's answer)中的错误形状)是您在输入层之后忘记了一个平面化层,这导致了不兼容的形状。改编自above的答案: