Tensorflow中默认的全局variable_scope
是什么?我如何检查这个对象?有人对此有想法吗?
回答:
从技术上讲,没有针对所有变量的全局变量作用域。如果你在脚本的顶层运行
x = tf.Variable(0.0, name='x')
将会创建一个没有变量作用域的x
变量到默认图中。
然而,对于tf.get_variable()
函数,情况略有不同:
x = tf.get_variable(name='x')
它首先做的就是调用tf.get_variable_scope()
函数,该函数返回当前的变量作用域,而当前的变量作用域会从本地堆栈中查找:
def get_variable_scope(): """返回当前的变量作用域。""" scope = ops.get_collection(_VARSCOPE_KEY) if scope: # 这个集合最多有一个元素,即默认作用域在[0]处。 return scope[0] scope = VariableScope(False) ops.add_to_collection(_VARSCOPE_KEY, scope) return scope
请注意,这个堆栈可能是空的,在这种情况下,会创建一个新的作用域并推到堆栈顶部。
如果这是你需要的对象,你可以通过调用:
scope = tf.get_variable_scope()
从顶层访问它,或者如果已经在一个作用域内,可以直接访问ops.get_collection(_VARSCOPE_KEY)
。这正是通过调用tf.get_variable()
函数创建新变量时所获取的作用域。这是一个普通的tf.VariableScope
类的实例,你可以轻松地检查它。