如何使用 Tensorflow 张量设置 Keras 层的输入?

Posted

技术标签:

【中文标题】如何使用 Tensorflow 张量设置 Keras 层的输入?【英文标题】:How to set the input of a Keras layer with a Tensorflow tensor? 【发布时间】:2017-07-15 10:48:26 【问题描述】:

在我的 previous question 中,我使用 Keras 的 Layer.set_input() 将我的 Tensorflow 预处理输出张量连接到我的 Keras 模型的输入。但是,this method has been removed 在 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'))

【问题讨论】:

【参考方案1】:

完成预处理后,您可以通过调用tensorInput的参数将张量添加为输入层

所以在你的情况下:

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

【讨论】:

在这一行 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)) 解决了这个问题。感谢您为我指明正确的方向! 没问题,我通常使用功能性Model 而不是Sequential,而Input 可以工作,但很高兴您最终修复了它 是的,我之前使用了功能性Model,并将预处理封装在Lambda 层中,紧接着Input 层:Lambda(preprocess_func, ...)。我可以假设,实际上,这可以达到同样的效果吗? 它应该..事实上我正要在我的回答中提出同样的建议。但后来我看到你正在为字符串tf.placeholder(tf.string) 创建一个占位符。而且由于我不从事 NLP 工作,我不确定它是否可以与 keras 一起使用

以上是关于如何使用 Tensorflow 张量设置 Keras 层的输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pytorch 和 tensorflow 中使用张量核心?

如何使用 TensorFlow 连接两个具有不同形状的张量?

如何使用 TensorFlow 张量索引列表?

TensorFlow进阶

Tensorflow.js 中的内存泄漏:如何清理未使用的张量?

如何有效地分配给 TensorFlow 中的张量切片