如何获得Keras模型中tensorflow输出节点的名称?



我试图从我的Keras (tensorflow后端)模型创建pb文件,这样我就可以在iOS上构建它。我使用的是freeze.py,我需要传递输出节点。如何获得Keras模型的输出节点的名称?

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py

您可以使用Keras model.summary()来获取最后一层的名称。

如果模型。输出不为空,您可以通过以下命令获取节点名称:

[node.op.name for node in model.outputs]

你通过

获得会话
session = keras.backend.get_session()

,然后通过

将所有训练变量转换为const
min_graph = convert_variables_to_constants(session, session.graph_def, [node.op.name for node in model.outputs])

之后,你可以通过

写一个protobuf文件
tensorflow.train.write_graph(min_graph, "/logdir/", "file.pb", as_text=True)

如果在Keras中构造模型时没有显式指定输出节点,则可以像这样将它们打印出来:

[print(n.name) for n in tf.get_default_graph().as_graph_def().node]

那么你所需要做的就是找到一个合适的,它通常与激活函数的名称相似。

您可以使用此字符串名称作为freeze_graph函数中output_node_names的值。

您还可以使用tensorflow实用程序:summarize_graph来查找可能的output_nodes。来自官方文档:

工具支持的许多转换需要知道模型的输入和输出层是什么。最好的来源是模型训练过程,其中对于分类器来说,输入将是从训练集接收数据的节点,输出将是预测。如果您不确定,summarize_graph工具可以检查模型,并提供关于可能的输入和输出节点的猜测,以及对调试有用的其他信息。

它只需要保存的图形pb文件作为输入。查看文档以获取示例。

output_node_names应该包含您打算用于推理的图节点的名称(例如;softmax)。它用于提取推理所需的子图。查看freeze_graph_test可能会有用。

最新更新