Tensorflow: What are the “output_node_names” for f

2019-02-21 12:52发布

问题:

I trained a tf.nn.seq2seq.model_with_buckets with seq2seq = tf.nn.seq2seq.embedding_attention_seq2seq very similar to the example in the Tensorflow Tutorial.

Now I would like to freeze the graph using freeze_graph.py. How can I find the "output_node_names" in my model?

回答1:

You can choose names for the nodes in your model by passing the optional name="myname" argument to pretty much any Tensorflow operator that builds a node. Tensorflow will pick names for graph nodes automatically if you don't specify them, but if you want to identify those nodes to a tool like freeze_graph.py, then it's best to choose the names yourself. Those names are what you pass to output_node_names.



回答2:

You can get all of the node names in your model with something like:

node_names = [node.name for node in tf.get_default_graph.as_graph_def().node]

Or with restoring the graph:

saver = tf.train.import_meta_graph(/path/to/meta/graph)
sess = tf.Session()
saver.restore(sess, /path/to/checkpoints)
graph = sess.graph
print([node.name for node in graph.as_graph_def().node])

You may need to filter these to get only your output nodes, or only the nodes that you want, but this can at least help you get the names for a graph that you have already trained and cannot afford to retrain with name='some_name' defined for each node.

Ideally, you want to define a name parameter for each operation or tensor that you are going to want to access later.