2017-06-22 4 views
2

Ich versuche, zwei Netzwerke zusammenzuführen. Ich kann dies erreichen, indem Sie folgendermaßen vorgehen:Keras - Ebenen verschmelzen - Keras 2.0

merged = Merge([CNN_Model, RNN_Model], mode='concat') 

Aber ich erhalte eine Warnung:

merged = Merge([CNN_Model, RNN_Model], mode='concat') 
__main__:1: UserWarning: The `Merge` layer is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc. 

Also habe ich versucht, dies:

merged = Concatenate([CNN_Model, RNN_Model]) 
model = Sequential() 
model.add(merged) 

und bekam diesen Fehler:

ValueError: The first layer in a Sequential model must get an `input_shape` or `batch_input_shape` argument. 

Kann mir jemand die Syntax wie geben Ich würde das zur Arbeit bringen?

+0

Können Sie uns mit einer vollständigen Modelldefinition versorgen? –

Antwort

1

Verwenden Sie keine sequentiellen Modelle für Modelle mit Verzweigungen.

die Funktions API verwenden:

from keras.models import Model 

Du hast Recht bei der Verwendung der Concatenate Schicht, aber Sie müssen „Tensor“, um es passieren. Und es zuerst Sie erstellen, dann rufen Sie es mit Eingang Tensoren (deshalb gibt es zwei Klammern):

concatOut = Concatenate()([CNN_Model.output,RNN_Model.output]) 

für ein Modell aus, dass erstellen, müssen Sie den Pfad von den Eingängen zu den Ausgängen definieren:

This answer assumes your existing models have only one input and output each.

+0

Das ist großartig, Was wäre, wenn ich diesem Modell noch weitere Ebenen hinzufügen möchte? Ich habe es versucht: 'model.add (Dense (22, activation = 'softmax', name = 'final_dense'))' 'und es gab mir' AttributeError: 'Model' Objekt hat kein Attribut 'add'' – Kevin

+0

Erstelle den Layer und geben Sie die Eingabe, um die Ausgabe zu erhalten: 'dichtesOut = dicht (22, Aktivierung = 'softmax', Name = 'final_dense') (concatOut)' --- Ihr Modell wird dann wie sein: 'model = Model ([CNN_Model.input , RNN_Modell.input], dichtesOut) ' –