2017-02-24 88 views
8

在我的previous question中,我使用Keras的'Layer.set_input()將我的Tensorflow預處理輸出張量連接到我的Keras模型的輸入。然而,在Keras版本1.1.1之後,this method has been removed如何使用Tensorflow張量設置Keras圖層的輸入?

我如何在更新的Keras版本中實現這一點?

例子:

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

回答

8

你與前處理完畢後,你可以通過調用tensor PARAM的Input

所以你的情況添加張量作爲輸入層:

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

在這一行'model.add(Input(tensor = tf_embedding_input))',下面的**錯誤被提出**:TypeError:a dded層必須是類Layer的一個實例。 Found:Tensor(「tf_embedding_input:0」,shape =(?,23),dtype = int64)'。我**通過將行更改爲'model.add(InputLayer(input_tensor = embedding_input))'來解決此問題。感謝您指引我朝着正確的方向! – Qululu

+1

沒問題,我通常使用功能'Model'而不是'Sequential',其中'Input'工作,但很高興您將它固定在您的末端 – indraforyou

+0

是的,我之前使用過功能'Model'並將預處理在「輸入」層之後的「Lambda」層中:「Lambda(preprocess_func,...)」。我可以假設,實際上,這實現了同樣的事情? – Qululu

相關問題