Я пытаюсь сделать простой составной автоэнкодер для набора данных mnist, но получаю следующую ошибку (при завершении первой эпохи):
ValueError: Layer sequential_6 expects 1 inputs, but it received 2 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 28, 28) dtype=uint8>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 28, 28) dtype=uint8>]
Это код:
import tensorflow_datasets as tfds
import numpy as np
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_val = x_test[5000:, :, :]
x_test = x_test[:5000, :, :]
from tensorflow import keras
stacked_encoder = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dense(70, activation="selu"),
keras.layers.Dense(20, activation="selu"),
])
stacked_decoder = keras.models.Sequential([
keras.layers.Dense(70, activation="selu", input_shape=[20]),
keras.layers.Dense(28*28, activation="sigmoid"),
keras.layers.Reshape([28,28]),
])
stacked_ae = keras.models.Sequential([stacked_encoder, stacked_decoder])
stacked_ae.compile(loss="binary_crossentropy", optimizer=keras.optimizers.SGD(lr=2))
history = stacked_ae.fit(x_train, x_train, epochs=10, validation_data=[x_val, x_val])
Ему удалось запустить первую эпоху, затем не удалось:
Epoch 1/10
1870/1875 [============================>.] - ETA: 0s - loss: -486.1084
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-559000a5a4cf> in <module>()
1 stacked_ae = keras.models.Sequential([stacked_encoder, stacked_decoder])
2 stacked_ae.compile(loss="binary_crossentropy", optimizer=keras.optimizers.SGD(lr=2))
----> 3 history = stacked_ae.fit(x_train, x_train, epochs=10, validation_data=[x_val, x_val])
12 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
966 except Exception as e: # pylint:disable=broad-except
967 if hasattr(e, "ag_error_metadata"):
--> 968 raise e.ag_error_metadata.to_exception(e)
969 else:
970 raise
ValueError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:876 test_function *
outputs = self.distribute_strategy.run(
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run **
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:844 test_step **
y_pred = self(x, training=False)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:885 __call__
self.name)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:158 assert_input_compatibility
' input tensors. Inputs received: ' + str(inputs))
ValueError: Layer sequential_6 expects 1 inputs, but it received 2 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 28, 28) dtype=uint8>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 28, 28) dtype=uint8>]