Python 将Keras K.函数()冻结为tensorflow图

Python 将Keras K.函数()冻结为tensorflow图,python,tensorflow,deep-learning,keras,Python,Tensorflow,Deep Learning,Keras,我有一个在Keras中训练过的模型,我使用K.function()使用它的中间层输出。有没有办法将此K.function()对象保存为tensorflow图?我想在tensorflow服务中使用此对象,但我看不到冻结KerasK.function()对象的方法。我最终找到了它,我想我应该在这里发布它,以防将来有人需要它。我必须从K.function()对象中获取节点名称 encoder = K.function([...]) # define your Function object enco

我有一个在Keras中训练过的模型,我使用
K.function()
使用它的中间层输出。有没有办法将此
K.function()
对象保存为tensorflow图?我想在tensorflow服务中使用此对象,但我看不到冻结Keras
K.function()
对象的方法。我最终找到了它,我想我应该在这里发布它,以防将来有人需要它。我必须从
K.function()
对象中获取节点名称

encoder = K.function([...])  # define your Function object
encoder_tensor_names = [t.name for t in encoder.outputs]
encoder_node_names = [tn.replace(':0', '') for tn in encoder_tensor_names]  # node names are tensor names without :0
graph_def = tf.graph_util.convert_variables_to_constants(
    K.get_session(), 
    K.get_session().graph.as_graph_def(), 
    encoder_node_names 
)

然后按照中的代码写出二进制(或文本)文件。它的美妙之处在于tensorflow足够聪明,只保留了前馈操作所需的图形部分,在我的例子中,它还冻结了单词嵌入,因此我不再需要单独的单词向量文件。

不确定我是否正确理解它,但是,如果您想要冻结层,您可以对每个层使用trainable属性,如前所述,而这不是我想要的。我想把它冻结成一个tensorflow图,这样我就可以使用tensorflow服务了。不是keras模特或是Layer看看这个:谢谢@Marcpah。我对代码进行了一些修改,使其适用于K.function对象,而不是整个keras模型。见下文