2 回答
TA贡献1886条经验 获得超2个赞
在您的示例中,您实际上并未使用范围 'foo'。您需要将参数传递给tf.variable_scope('foo', 'bar')or tf.variable_scope(scope, 'bar')。make_bar在任何一种情况下,您都在不带参数的情况下调用方法,这意味着在您的第一个示例中name_or_scope='bar',在第二个示例中name_or_scope=scope(带有 value None)和default_name='bar'.
这可能是你想要的:
import tensorflow as tf
def make_bar(scope=None):
with tf.variable_scope(scope, 'bar'):
tf.get_variable('baz', ())
with tf.variable_scope('foo') as scope:
make_bar(scope)
scope.reuse_variables()
make_bar(scope)
我实际上建议不要使用默认参数,因为它们会像您的示例一样降低可读性。None示波器何时是您想要的答案?如果你测试它会更有意义,也许像这样?
import tensorflow as tf
def make_bar(scope=None):
if scope is None:
scope = 'default_scope'
with tf.variable_scope(scope, 'bar'):
tf.get_variable('baz', ())
with tf.variable_scope('foo') as scope:
make_bar(scope) # use foo scope
scope.reuse_variables()
make_bar() # use 'default_scope'
但这会降低代码的可读性,并且更容易导致错误
添加回答
举报