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

ags*_*lid 28 python keras tensorflow

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

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

小智 21

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

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

[node.op.name for node in model.outputs]
Run Code Online (Sandbox Code Playgroud)

你通过这个会议

session = keras.backend.get_session()
Run Code Online (Sandbox Code Playgroud)

并将所有训练变量转换为consts via

min_graph = convert_variables_to_constants(session, session.graph_def, [node.op.name for node in model.outputs])
Run Code Online (Sandbox Code Playgroud)

之后你可以通过写一个protobuf文件

tensorflow.train.write_graph(min_graph, "/logdir/", "file.pb", as_text=True)
Run Code Online (Sandbox Code Playgroud)

  • [model.outputs中节点的node.op.name]对我来说是关键.我发现没有官方文档指出我如何检索编译的模型的输出节点,并通过带有Tensorflow的Keras API进行调整. (3认同)

小智 12

如果在Keras中构建模型时未明确指定输出节点,则可以将其打印出来,如下所示:

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

然后你需要做的就是找到合适的,通常类似于激活功能的名称.您可以使用您output_node_namesfreeze_graph函数中找到的字符串名称作为值.

  • 这个方法将返回超过10000个节点的名称,如何确定应该选择哪一个?谢谢! (15认同)