2016-12-07 7 views
1

予想通り、次の作品は:既存のテンソルフローを作る方法variable_scopeはopsに適用されますか?

import tensorflow as tf 
with tf.variable_scope('layer123'): 
    v = tf.get_variable('v', [], initializer=tf.constant_initializer(3., tf.float32)) 
    w = v * 2 

print(v.name) # Prints layer123/v:0 
print(w.name) # Prints layer123/mul:0 

しかし、私が代わりに次の試してみてください。ここでは

with tf.variable_scope('layer123'): 
    v = tf.get_variable('v', [], initializer=tf.constant_initializer(3., tf.float32)) 

# There might be some code here (perhaps even a different function), but not necessarily 

with tf.variable_scope('layer123'): 
    w = v * 2 

print(v.name) # Prints layer123/v:0 
print(w.name) # Prints layer123_1/mul:0 

を、変数w生活layer123_1新しいvariable_scope名前の自動インチこの現象を防ぐにはどうしたらいいですか? 2番目のwithステートメントでreuse=Trueを設定しても、期待どおりには役に立ちませんでした。

私はw.name == 'layer123/mul:0'を持ちたいと思っています。特に、掛け算がすぐ後で定義されていない(つまり、スコープを終了しない)場合、変数vが定義されています。

ありがとうございます!

答えて

0

これは、スコープオブジェクトを再利用することで可能です。たとえば、

with tf.variable_scope('layer123') as scope: 
    v = tf.get_variable('v', [], initializer=tf.constant_initializer(3., tf.float32)) 
with tf.variable_scope(scope): 
    w = v * 2 

詳細については、documentation on sharing variablesを参照してください。

関連する問題