2017-02-24 37 views
8

W moim previous question użyłem Keras 'Layer.set_input() do podłączenia mojego tensora wyjściowego przetwarzania Tensorflow do wejścia mojego modelu Keras. Jednakże, this method has been removed po Keras w wersji 1.1.1.Jak ustawić wejście warstwy Keras za pomocą tensora Tensorflow?

Jak mogę to osiągnąć w nowszych wersjach Keras?

Przykład:

# 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')) 

Odpowiedz

8

Po skończeniu z obróbki wstępnej, można dodać tensor jako warstwy wejściowej poprzez wywołanie tensor param z Input

Więc w twoim przypadku:

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

W tym wierszu 'model.add (Input (tensor = tf_embedding_input))', następuje następujący ** błąd **: 'TypeError: The a warstwa dded musi być instancją klasy Layer. Znaleziono: Tensor ("tf_embedding_input: 0", shape = (?, 23), dtype = int64) '. Ja ** rozwiązałem to **, zmieniając linię na 'model.add (InputLayer (input_tensor = embedding_input))'. Dzięki za wskazanie mnie we właściwym kierunku! – Qululu

+1

Nie ma problemu, zwykle używam funkcjonalnego 'Modelu', a nie' Sekwencyjnego', gdzie 'Input' działa, ale cieszę się, że naprawiłeś go na końcu. – indraforyou

+0

Tak, wcześniej użyłem funkcjonalnego" Modelu "i zawinąłem wstępne przetwarzanie w warstwie 'Lambda' po warstwie' Input': 'Lambda (preprocess_func, ...)'. Czy mogę założyć, że w praktyce osiąga to samo? – Qululu

Powiązane problemy