[英]Input Shape in Keras Autoencoder
我正在嘗試在以下代碼中訓練自動編碼器:
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:Model 是用形狀 (None, 28) 構造的輸入 KerasTensor(type_spec=TensorSpec(shape=(None, 28), dtype=tf.float32, name='img'), name ='img', description="created by layer 'img'"),但它是在形狀不兼容的輸入上調用的 (None, 28, 28)。”
我不知道如何處理或調整我的輸入。 我的 x_train 是一個大小為 [769,28,28] 的向量
有人可以幫我處理錯誤嗎?
謝謝
您的自動編碼器的輸入形狀有點奇怪,您的訓練數據的形狀為 28x28,批次為 769,因此修復應該是這樣的:
encoder_input = keras.layer.Input(shape=(28, 28), name='img')
encoder_out = keras.layers.Dense(1, activation = "relu")(encoder_input)
# For ur decoder, you need to change a bit as well
decoder_input = keras.layers.Dense(784, activation = "sigmoid")(encoder_out) # Flatten until 28x28 =784
decoder_output = keras.layers.Reshape((28, 28))(decoder_input) # From there reshape back to 28x28
我按照您的建議進行了更正,但它仍然返回以下錯誤:
ValueError Traceback (most recent call last)
<ipython-input-48-78f8cac6c724> in <module>()
6
7 decoder_input = keras.layers.Dense(784, activation = "sigmoid")(encoder_out)
----> 8 decoder_output = keras.layers.Reshape((28, 28))(decoder_input)
9
10 opt = keras.optimizers.RMSprop(learning_rate=1e-3)
6 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/layers/core.py in _fix_unknown_dimension(self, input_shape, output_shape)
534 output_shape[unknown] = original // known
535 elif original != known:
--> 536 raise ValueError(msg)
537 return output_shape
538
ValueError: total size of new array must be unchanged, input_shape = [28, 784], output_shape = [28, 28]
代碼:
encoder_input = keras.layers.Input(shape=(28,28), 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(784, activation = "sigmoid")(encoder_out)
decoder_output = keras.layers.Reshape((28, 28))(decoder_input)
opt = keras.optimizers.RMSprop(learning_rate=1e-3)
autoencoder = keras.Model(encoder_input, decoder_output, name = "autoencoder")
autoencoder.summary()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.