Ich habe das Tutorial "Building Autoencoder in Keras" gefolgt: https://blog.keras.io/building-autoencoders-in-keras.htmlWie Daten aus der Tiefe in Autoencoder Keras (Unklarheit in Tutorial) codiert decodieren
Die erste, einfache Lösung funktioniert gut. Aber im Abschnitt "Deep Autoencoder" scheint der im Tutorial bereitgestellte Code nicht vollständig zu funktionieren.
Hier ist mein Code (nur bis wo das Problem erscheint), die gerade aus dem turorial kopiert wird:
from keras.layers import Input, Dense
from keras.models import Model
encoding_dim = 32
input_img = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded) # Multiple encoding
decoded = Dense(64, activation='relu')(encoded) # and decoding layers.
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
autoencoder = Model(input_img, decoded)
encoder = Model(input_img, encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input)) # Crash happens here.
ich diesen Fehler:
Traceback (most recent call last):
File "keras_test.py", line 20, in <module>
decoder = Model(encoded_input, decoder_layer(encoded_input)) # Crash happens here
File "/Users/paulmagnus/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/keras/engine/topology.py", line 569, in __call__
self.assert_input_compatibility(inputs)
File "/Users/paulmagnus/Library/Enthought/Canopy/edm/envs/User/lib/python2.7/site-packages/keras/engine/topology.py", line 479, in assert_input_compatibility
' but got shape ' + str(x_shape))
ValueError: Input 0 is incompatible with layer dense_6: expected axis -1 of input shape to have value 128 but got shape (None, 32)
Ich vermute, dass decoder
ist verbunden mit der falschen Dekodierschicht und/oder dass die Form seiner Eingabe oder Ausgabe falsch ist. Aber was soll ich dagegen tun?
Die decoder
ist nicht notwendig für die autoencoder
zu arbeiten. Ich kann das Lernen durchführen und die Bilder codieren, die dem Rest des Tutoriums folgen. Aber ohne decoder
kann ich die Bilder nicht im Originalformat dekodieren, um zu sehen, ob sie tatsächlich gut aussehen. Das Tutorial erwähnt nichts darüber und zeigt nur die decodierten Bilder ohne ein Wort. Ich nehme an, der Autor hat angenommen, dass jede Änderung, die er an decoder
vorgenommen hat, um dies zu erreichen, trivial war.
Zur Klarstellung: die Single-Layer-Version funktioniert gut, wo anstelle von 3-Codierung und Decodierung 3 Schichten wir
encoded = Dense(32, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
und alles andere ist, wie oben gleich haben gerade. Dann gibt es keinen Fehler und ich kann decoder
verwenden, um die Bilder neu zu erstellen.
Hallo PaulMag; Ich denke Ihre Frage ist Code-bezogen und über das Debuggen Ihres Keras-Modell-Setups, nicht so sehr über Statistiken oder tiefe Lerntechniken. Wenn dies der Fall ist, ist es besser mit der "Mission" von StackOverflow verbunden, nicht mit CrossValidated. – fnl
@fnl Ja, Sie haben Recht. Ich war mir nicht sicher, auf welcher Plattform ich das fragen sollte. Soll ich es auf StackOverflow repost und lösche es aus CrossValidated? – PaulMag
Ich habe gerade herausgefunden, dass Migration eine Sache ist. Ich habe diese Frage für die Migration zu StackOverflow markiert. – PaulMag