Category: News

Here you will find all news about this website and it\’s future development in terms of mathematics, machine learning, deep learning and reinforcement learning

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 ) 
)
10
Apr
2021

Tensorflow und numpy 1.20.x

6 0
Lesezeit:1 min, 36 sec

In letzter Zeit häufen sich die Meldungen, dass numpy mit der Version 1.20 den Umgang mit “symbolic tensors” massiv verändert hat. Das hat Auswirkungen auf Tensorflow und Keras, die mit der neusten numpy-Version so noch nicht umgehen können. Gute Beispiele sind die Recurrenten Layer von Keras, die sich aktuell noch nicht mit numpy 1.20 verwenden lassen.

Die Lösung

Die aktuell einzige einfache Lösung ist, numpy in der Version 1.19.2 zu installieren (die ist als Minimum für Tensorflow und Keras notwendig).

In einer Anaconda-Umgebung hilft es hier im Terminal folgenden Befehl auszuführen:

conda install numpy=1.19.2

In einer normalen Python-Umgang mit pip:

pip install numpy==1.19.2 --force-reinstall

Beides entfernt das aktuelle Numpy-Paket, und installiert die von Version 1.19.2 – Danach sollte die Fehlermeldung auch verschwunden sein.

Die explizite Lösung

Das Problem mit numpy 1.20 ist ja der Umgang mit symbolischen Tensoren. Das bedeutet, dass die Tensorflow-eigene Datenstrukur des Tensors nicht mehr kompatibel zu den neuen numpy-Tensoren ist. Somit lassen sich die numpy-Operationen nicht mehr auf den sonst kompatiblen Tensorflow-Datenstrukturen ausführen. Ersetzt man nun diese Operationen durch passende aus dem Tensorflow-Paket funktioniert das auch wieder.

Beispiele:

Anstatt np.add ist tf.math.add eine Lösung, oder anstatt np.prod kann man tf.math.reduce_prod nutzen usw. Das funktioniert natürlich nur in eigenem Code, und nicht in mitgelieferten Libraries, wie Keras.