Простой составной автоэнкодер - при завершении первой эпохи я получаю сообщение об ошибке "ожидает 1 вход, но получено 2 входных тензора" - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь сделать простой составной автоэнкодер для набора данных 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>]
...