2017-02-24 2 views
8

In meinem previous question habe ich Keras 'Layer.set_input() verwendet, um meinen Tensorflow-Vorverarbeitungsausgangstensor mit dem Eingang meines Keras-Modells zu verbinden. Jedoch this method has been removed nach Keras-Version 1.1.1.Wie wird der Eingang einer Keras-Schicht mit einem Tensorflow-Tensor eingestellt?

Wie kann ich dies in neueren Keras Versionen erreichen?

Beispiel:

# Tensorflow pre-processing 
raw_input = tf.placeholder(tf.string) 
### some TF operations on raw_input ### 
tf_embedding_input = ... # pre-processing output tensor 

# Keras model 
model = Sequential() 
e = Embedding(max_features, 128, input_length=maxlen) 

### THIS DOESN'T WORK ANYMORE ### 
e.set_input(tf_embedding_input) 
################################ 

model.add(e) 
model.add(LSTM(128, activation='sigmoid')) 
model.add(Dense(num_classes, activation='softmax')) 

Antwort

8

Nachdem Sie mit Vorverarbeitung fertig sind, können Sie den Tensor als Eingangsschicht hinzufügen, durch den Aufruf tensor param von Input

So in Ihrem Fall:

tf_embedding_input = ... # pre-processing output tensor 

# Keras model 
model = Sequential() 
model.add(Input(tensor=tf_embedding_input)) 
model.add(Embedding(max_features, 128, input_length=maxlen)) 
+5

In dieser Zeile 'model.add (Eingabe (tensor = tf_embedding_input))' wird der folgende ** Fehler ausgelöst **: 'TypeError: Die a Der Layer "dded" muss eine Instanz der Klasse "Layer" sein. Gefunden: Tensor ("tf_embedding_input: 0", form = (?, 23), dtype = int64) '. Ich löste das **, indem ich die Zeile in 'model.add (InputLayer (input_tensor = embedding_input))' änderte. Danke, dass du mich in die richtige Richtung gelenkt hast! – Qululu

+1

Kein Problem, ich benutze normalerweise das funktionale 'Model' und nicht' Sequential', wo 'Input' funktioniert, aber froh, dass Sie es an Ihrem Ende behoben haben – indraforyou

+0

Ja, ich hatte vorher das funktionale' Model' verwendet und die Vorverarbeitung umwickelt in einer 'Lambda'-Ebene, die auf eine' Input'-Ebene folgt: 'Lambda (preprocess_func, ...)'. Kann ich davon ausgehen, dass dies praktisch dasselbe erreicht? – Qululu

Verwandte Themen