Keras: Verwenden Sie die gleichen Schicht in verschiedenen Modellen (Anteil GEWICHTE)
Schnelle Antwort:
Dies ist in der Tat wirklich einfach.
Hier ist der code (für diejenigen, die nicht wollen, um diesen text Lesen):
inputs=Input((784,))
encode=Dense(10, input_shape=[784])(inputs)
decode=Dense(784, input_shape=[10])
model=Model(input=inputs, output=decode(encode))
inputs_2=Input((10,))
decode_model=Model(input=inputs_2, output=decode(inputs_2))
In diesem setup decode_model
wird die gleiche decode layer wie die model
.
Wenn Sie trainieren, die model
, die decode_model
ausgebildet werden, zu.
Eigentliche Frage:
Ich versuche zum erstellen einer einfachen autoencoder für MNIST in Keras:
Dies ist der code so weit:
model=Sequential()
encode=Dense(10, input_shape=[784])
decode=Dense(784, input_shape=[10])
model.add(encode)
model.add(decode)
model.compile(loss="mse",
optimizer="adadelta",
metrics=["accuracy"])
decode_model=Sequential()
decode_model.add(decode)
Trainiere ich es, die Identität zu erfahren-Funktion
model.fit(X_train,X_train,batch_size=50, nb_epoch=10, verbose=1,
validation_data=[X_test, X_test])
Den Wiederaufbau ist Recht interessant:
Aber ich möchte auch Blick auf die Darstellungen der cluster.
Was ist die Ausgabe übergeben, [1,0...0], um die Decodierung von layer ?
Dies sollte dem "cluster-mean" einer Klasse in MNIST.
Damit zu tun, dass ich erstellt ein zweites Modell decode_model
, die verwendet der decoder-Ebene.
Aber wenn ich versuchen, das Modell, es beschwert sich:
Exception: Fehler bei der Prüfung : voraussichtlich dense_input_5 um eine Form haben (Keine, 784), sondern bekam-array mit Form (10, 10)
Schien seltsam. Es ist einfach eine Dichte Schicht, die Matrix wäre nicht mal in der Lage zu verarbeiten, 784-dim-Eingang.
Ich entschied mich, das Modell Zusammenfassung:
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
dense_14 (Dense) (None, 784) 8624 dense_13[0][0]
====================================================================================================
Total params: 8624
Verbunden ist dense_13.
Es ist schwierig zu verfolgen, die Namen der Schichten, aber das sieht aus wie der encoder-Schicht. Sicher genug, das Modell Zusammenfassung des gesamten Modells ist:
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
dense_13 (Dense) (None, 10) 7850 dense_input_6[0][0]
____________________________________________________________________________________________________
dense_14 (Dense) (None, 784) 8624 dense_13[0][0]
====================================================================================================
Total params: 16474
____________________
Offenbar die Schichten sind fest miteinander verbunden.
Seltsamerweise gibt es keine input-layer in meine decode_model
.
Wie kann ich die Wiederverwendung einer Schicht in Keras ?
Ich habe mir auf der funktionalen API, aber es gibt auch Schichten miteinander verschmolzen sind.
- Haben Sie schauen Sie sich dieses tutorial? blog.keras.io/building-autoencoders-in-keras.html
- Nein, aber es sieht sehr interessant. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oh, nevermind.
Sollte ich haben, Lesen Sie die gesamte funktionale API:
https://keras.io/getting-started/functional-api-guide/#shared-layers
Hier ist eine der Vorhersagen (vielleicht fehlen noch einige Trainings):
Ich vermute, dies könnte eine 3 ?
Naja wenigstens funktioniert es jetzt.
Und für diejenigen mit ähnlichen Problemen,
hier ist der aktualisierte code:
Ich nur kompiliert eines der Modelle.
Für das training müssen Sie die Erstellung eines Modells für die Vorhersage, dass ist nicht notwendig.