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:

Keras: Verwenden Sie die gleichen Schicht in verschiedenen Modellen (Anteil GEWICHTE)

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.

InformationsquelleAutor lhk | 2016-10-27
Schreibe einen Kommentar