如何使用 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】:完成预处理后,您可以通过调用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))
【讨论】:
在这一行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 连接两个具有不同形状的张量?