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

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

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

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

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

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

然后,您所需要做的就是找到正确的名称,该名称通常类似于激活功能的名称。您可以只使用在freeze_graph函数中找到的字符串名称作为output_node_names的值。

收藏
评论

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

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

[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)
收藏
评论

您也可以使用tensorflow实用程序: summarize_graph找到可能output_nodes 。从官方文档中

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

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

收藏
评论

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号