我有张量流模型的.meta和.ckpt文件。我想知道确切的输入和输出节点名称,但是我通过遵循this获得了节点名称的列表。
当我有一个冻结的protobuf模型时,使用以下代码获取输入节点名称和输出节点名称作为列表的开头和结尾:
import tensorflow as tf
from tensorflow.python.platform import gfile
GRAPH_PB_PATH = 'frozen_model.pb'
with tf.Session() as sess:
print("load graph")
with gfile.FastGFile(GRAPH_PB_PATH,'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
sess.graph.as_default()
tf.import_graph_def(graph_def, name='')
graph_nodes=[n for n in graph_def.node]
names = []
for t in graph_nodes:
names.append(t.name)
print(names)
我可以对.ckpt或.meta文件做类似的事情吗?
答案 0 :(得分:1)
.meta
文件包含有关tensorflow graph中不同节点的信息。 here对此进行了更好的解释。
此时图形中不同变量的值分别存储在checkpoint.data-xxxx-of-xxxx
文件的checkpoint文件夹中。
与冻结模型的情况相反,在正常检查点过程中没有输入或输出节点的概念。冻结模型将输出整个张量流图的子集。主图的此子集仅具有输出节点所依赖的那些节点。由于冻结模型是出于服务目的而完成的,因此它将张量流变量转换为常量,从而无需在每个步骤中存储其他信息,例如不同变量的梯度。
如果您仍想标识您感兴趣的节点,则可以从.meta
文件中恢复图形并在tensorboard中将其可视化。
import tensorflow as tf
from tensorflow.summary import FileWriter
sess = tf.Session()
tf.train.import_meta_graph("your-meta-graph-file.meta")
FileWriter("__tb", sess.graph)
这将在当前目录中创建一个__tb
文件夹,然后您可以通过发出以下命令来查看图形。
tensorboard --logdir __tb
Here是指向某些模型的屏幕截图的链接,其中选定了节点。您可以从右上角获取节点的名称。