6

変数/プレースホルダの名前で参照を取得する方法は?私が参照してる名前で

tf.placeholder(tf.float32, name='NAME') 
tf.get_variable("W", [n_in, n_out],initializer=w_init()) 

私は与えられた名前を保持するプレースホルダを使用して、参照を取得する方法が存在すると仮定して、私は参照を渡すことなく外部関数からアクセスしたいいくつかのプレースホルダを、持っています彼らへ? (これはグラフの作成中、実行時ではなく)

そして、私の2番目の質問は、どのようにスコープに関係なく指定された名前を保持するすべての変数を取得できますか?

例:すべてのウェイトは、多くのスコープで「W」という名前が付けられていますが、それらをすべてリストに入れたいと思います。私は手動でそれぞれを追加したくありません。バイアスは同じことができます。私はヒストグラムをしたいと言うことができます。

答えて

11

まず、tf.Graph.get_tensor_by_name()を使用してプレースホルダを取得できます。たとえば、デフォルトのグラフで作業していると仮定:

placeholder1 = tf.placeholder(tf.float32, name='NAME') 
placeholder2 = tf.get_default_graph().get_tensor_by_name('NAME:0') 
assert placeholder1 == placeholder2 

第二に、私は与えられた名前(関係なく、その範囲)を持つすべての変数を取得するには、次の機能を使用します。

def get_all_variables_with_name(var_name): 
    name = var_name + ':0' 
    return [var for var in tf.all_variables() if var.name.endswith(name)] 
+0

完璧、ありがとう。私がメモしたいことの一つは、なぜですか?0?そして、あなたが今までに使ったことがあるときは、1? –

+5

'op_name:0'は"テンソルは 'op_name'という演算の0番目の出力です。"ですから、複数の出力を持つ演算の出力を得るには '...:1'を使うかもしれませんが、' tf.placeholder() 'と' tf.Variable'は両方とも単一出力演算ですので、常に '...:0彼らのために。 – mrry

関連する問題