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

时间:2016-10-13 18:16:43

标签: python tensorflow keras

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

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

4 个答案:

答案 0 :(得分:16)

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

如果model.outputs不为空,您可以通过以下方式获取节点名称:

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

你通过

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

并通过

将所有训练变量转换为consts
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)

答案 1 :(得分:11)

如果在Keras中构建模型时未明确指定输出节点,则可以像这样打印出来:

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

然后你需要做的就是找到合适的,通常类似于激活功能的名称。您可以在output_node_names函数中使用此freeze_graph的值作为{{1}}的值。

答案 2 :(得分:4)

您还可以使用tensorflow实用程序:summarize_graph查找可能的output_nodes。来自official documentation

  

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

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

答案 3 :(得分:2)

output_node_names应包含您打算用于推理的图形节点的名称(例如softmax)。它用于提取推理所需的sub-graph。 查看freeze_graph_test可能很有用。