首页 > 解决方案 > 如何找到 output_node_name 来构建冻结图?

问题描述

我指 的是https://github.com/dennybritz/cnn-text-classification-tf作为参考。我的目标是从模型文件构建冻结图。我想知道签名中的输入和输出节点以有效地构建冻结图。我正在使用以下代码从图形定义中打印 proto 文件。

saver=tf.train.import_meta_graph('some_path/model.ckpt.meta')
imported_graph = tf.get_default_graph() 
graph_op = imported_graph.get_operations() with open('output.txt', 'w') as f:
        for i in graph_op:
            f.write(str(i))

我得到的输出如下:https://drive.google.com/drive/folders/1iZQqohx8jAWbSw7XV3vFJuLkaUp0Dt2s?usp=sharing

我怎么知道哪个是输出节点,哪个是输入节点,这个文件中有大量的输入和输出?

标签: python-3.xtensorflowmachine-learningdeep-learning

解决方案


我建议使用 Tensorboard 来可视化图形结构,而不是使用带有节点的文本文件。您可以在此处找到更多详细信息。

然而,图表本身没有输入或输出的概念。您可以将没有输入连接的节点视为输入节点的良好候选者,尤其是占位符节点。连接到损失函数的节点是输出节点的良好候选者。

总结一下:一般情况下,你需要通过分析网络架构来猜测哪些节点是输入,哪些是输出。

至于您引用的存储库,您可以阅读eval.py代码并找到以下几行:

input_x = graph.get_operation_by_name("input_x").outputs[0]
# input_y = graph.get_operation_by_name("input_y").outputs[0]
dropout_keep_prob = graph.get_operation_by_name("dropout_keep_prob").outputs[0]

# Tensors we want to evaluate
predictions = graph.get_operation_by_name("output/predictions").outputs[0]

所以很可能输入节点是“input_x”,输出节点是“输出/预测”。


推荐阅读