あなたはtf.Variable`」の代わりにtf.get_variable()
を使用する場合があります。
with tf.variable_scope('var_scope', reuse=False) as var_scope:
var = tf.get_variable('var', [1])
var2 = tf.Variable([1], name='var2')
print var.name # var_scope/var:0
print var2.name # var_scope/var2:0
with tf.variable_scope('var_scope', reuse=True) as var_scope:
var = tf.get_variable('var', [1])
var2 = tf.Variable([1], name='var2')
print var.name # var_scope/var:0
print var2.name # var_scope_1/var2:0
私はあなたが成功し、本当にあなたの変数名は、あなたがかもしれませんがvariable_scope
のname_scope
inteadをという名前の別の範囲で影響何をしたいvariable_scope、「再入力」しているが、あなたの例ではということだと思います。この背後にある理由推測。公式文書からhereあなたはそれを見ることができます:
我々はtf.variable_scope(「名前」)で行う、これは暗黙的に tf.name_scope(「名前」)を開きます。
name_scope
はもともと
tf.Variable
が実際に操作され、その操作名は、それによって作成された変数によって「継承」されますので、操作名(のような
add
、
matmul
)を管理するために使用されるので、
name_scope
の名前ではなく、さプレフィックスとして
variable_scope
が使用されます。
しかし、もしあなたがtf.Variableを使用したい場合は、あなたが直接with
文でname_scope
を使用することができますに注意を払うために
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
with tf.name_scope(n_scope) as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
ことの一つは、あなたが引数として以前からキャプチャスコープvaribleを渡すべきであるということですに渡される引数に
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope_1/var_1:0
ご注意:あなたは、むしろstr
スコープ名を使用するよりも、名前のスコープを「再入力」にしたいwith
声明。次のように
名引数が解釈されます:
文字列は、新しい名前のスコープを作成します(「/」で終わらない)、この動作は再びname_scope
のドキュメンテーション文字列に記述されています コンテキストで作成されたすべての操作の接頭辞に、 という名前が追加されています。以前に名前が使用されていた場合は、 によってself.unique_name(name)という名前で一意になります。
以前 スコープとしてg.name_scope(...)とからキャプチャ範囲:ステートメントは、再入力、既存のスコープすることが可能となり、「絶対」名のスコープ、 として扱われます。
Noneまたは空の文字列の値は、現在の名前 のスコープをトップレベル(空の)名前スコープにリセットします。
Thxを、超便利! – Mathew