web-dev-qa-db-ja.com

Tensorflow:model_with_bucketsモデルのfreeze_graph.pyの「output_node_names」は何ですか?

Tensorflowチュートリアル の例と非常によく似たtf.nn.seq2seq.model_with_bucketsseq2seq = tf.nn.seq2seq.embedding_attention_seq2seqでトレーニングしました。

freeze_graph.pyを使用してグラフをフリーズしたいと思います。モデルで「output_node_names」を見つけるにはどうすればよいですか?

13
WS91

オプションのname="myname"引数を、ノードを構築するほとんどすべてのTensorflow演算子に渡すことにより、モデル内のノードの名前を選択できます。 Tensorflowはグラフノードの名前を指定しない場合は自動的に選択しますが、freeze_graph.pyなどのツールでそれらのノードを識別したい場合は、自分で名前を選択するのが最善です。これらの名前は、output_node_namesに渡すものです。

7
Peter Hawkins

モデル内のすべてのノード名を取得するには、次のようにします。

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

またはグラフを復元すると:

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])

これらをフィルタリングして、出力ノードのみ、または必要なノードのみを取得する必要がある場合がありますが、これは少なくとも、すでにトレーニング済みでname='some_name'で再トレーニングする余裕がないグラフの名前を取得するのに役立ちます。各ノードに定義されます。

理想的には、後でアクセスする操作またはテンソルごとにnameパラメーターを定義する必要があります。

3
Engineero