13
Apr
2021

Tensorflow 2.3 und Keras validation_data

8 0
Lesezeit:1 min, 45 sec

Seit Tensorflow 2.3 gibt es mit vielen Beispielen aus Büchern oder Dokumentationen in Verbindung mit der Keras-API diese oder eine ähnliche Fehlermeldung:

ValueError: Layer sequential_XX expects 1 inputs, but it received 2 input tensors.

Die Lösung

Die Lösung dieses Problems findet sich relativ schnell in der Keras Dokumentation (link):

validation_data: … validation_data could be: – tuple (x_val, y_val) of Numpy arrays or tensors – tuple (x_val, y_val, val_sample_weights) of Numpy arrays – dataset …

Das bedeutet, validation_data muss ein Tuple und darf keine Liste (von Numpy-Arrays oder Tensoren) sein. Man muss demnach runde Klammern (...), anstatt eckiger [...] nutzen.

In Tensorflow v2.0 war das kein Problem, weil das Framework solche Kleinigkeiten implizit abgehandelt hat. Seit v2.3 ist das Verhalten nun anders und strenger.

Ein typischer Autoencoder muss am Ende also so aussehen:

st_encoder = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28, 28]),
    keras.layers.Dense(100, activation="selu"),
    keras.layers.Dense(30, activation="selu"),
])
st_decoder = keras.models.Sequential([
    keras.layers.Dense(100, activation="selu"),
    keras.layers.Dense(28 * 28, activation="sigmoid"),
    keras.layers.Reshape([28, 28])
])
st_autoencoder = keras.models.Sequential([ st_encoder, st_decoder ])
st_autoencoder.compile(
    loss="binary_crossentropy",
    optimizer=keras.optimizers.SGD(lr=1.5),
    metrics=[rounded_accuracy])
history = st_autoencoder.fit(
    X_train, X_train, epochs=20,
    validation_data= ( X_valid, X_valid ) 
)
Share

You may also like...