首页 > 解决方案 > 需要找出哪些输出节点名称需要传递给 Tensorflowjs 转换器

问题描述

我是 Tensorflow 的新手,我开发了一个模型,它使用 Tensorflow、OpenCV 检测一种特殊类型的卡片,我能够在离线模式下使用我的网络摄像头正确检测到卡片,但我想将它迁移到网络(tensorflowjs ) 但我在转换方面面临一些问题。

我有检查点、元数据文件以及冻结的推理图 pb 文件

我使用以下代码生成了节点名称列表

import tensorflow as tf


modelName = './<path_to_meta_file>'

tf.reset_default_graph()
with tf.Session() as sess:
    saver = tf.train.import_meta_graph(modelName)
    graph_def = tf.get_default_graph().as_graph_def()
    node_list=[n.name for n in graph_def.node]


print(node_list)

这是使用 tensorflow import_meta_graph()的输出文件 输出节点名称

我关心的是我应该在下面的命令中传递什么输出节点名称

tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='<what to write here from that output txt file?>' ./frozen_inference_graph.pb ./web_model

我想在客户端使用真实的网络摄像头运行我现有的模型,任何解决方案和建议将不胜感激

设置细节:

张量流 1.12.0

使用 Anaconda 的 Python 3.5。

标签: javascriptpythontensorflowtensorflowjs-converter

解决方案


对我来说,tensorflowjs_converter 通过使用“Placeholder”作为 --output_node_names 的参数来运行:

tensorflowjs_converter --input_format=tf_frozen_model --output_format=tensorflowjs --output_node_names=Placeholder ./frozen_inference_graph.pb ./web_model

不过,不确定这是否是一个有效的解决方案,因为即使转换器在没有错误消息的情况下运行,我也会从 model_pruner 获得输出:“之前的图形大小:1187 个节点,1221 个边。之后的图形大小:1 个节点,0 个边。” - 所以我的输入有效地减少到零,这似乎也不正确。


更新:经过两个多小时的研究,我发现 tensorboard 指示节点名称(请参阅此页面)。就我而言,事实证明--output_node_names=final_result- 占位符不超过名称已经说明的内容,是一个需要填充有效内容的占位符。


推荐阅读