Как установить вход слоя Keras с тензором Tensorflow?

В моем предыдущем вопросе, я использовал Layer.set_input() Кераса для подключения моего выходного тензора предварительной обработки Tensorflow к входу моей модели Keras. Однако этот метод был удален после версии Keras 1.1.1.

Как я могу добиться этого в более новых версиях 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'))

person Qululu    schedule 24.02.2017    source источник


Ответы (1)


После того, как вы закончите предварительную обработку, вы можете добавить тензор в качестве входного слоя, вызвав параметр tensor из 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))
person indraforyou    schedule 24.02.2017
comment
В этой строке model.add(Input(tensor=tf_embedding_input)) возникает следующая ошибка: TypeError: The added layer must be an instance of class Layer. Found: Tensor("tf_embedding_input:0", shape=(?, 23), dtype=int64). Я решил это, изменив строку на model.add(InputLayer(input_tensor=embedding_input)). Спасибо, что указали мне правильное направление! - person Qululu; 01.03.2017
comment
Нет проблем, я обычно использую функционал Model, а не Sequential, где работает Input, но рад, что вы исправили его на своей стороне - person indraforyou; 01.03.2017
comment
Да, я ранее использовал функционал Model и заключил предварительную обработку в слой Lambda, следующий за слоем Input: Lambda(preprocess_func, ...). Могу ли я предположить, что это практически то же самое? - person Qululu; 01.03.2017
comment
Должно быть ... на самом деле я собирался предложить то же самое в своем ответе. Но потом я увидел, что вы создаете заполнитель для строки tf.placeholder(tf.string). И поскольку я не работаю над НЛП, я не был уверен, играет ли он волю с керасом. - person indraforyou; 01.03.2017