scope可以定义指定的命名空间,在此空间中定义的变量可以与空间外的变量重名,调用该变量时,只需要指定命名空间即可。
代码示例如下:
import tensorflow as tf v1 = tf.get_variable("v",[1]) print (v1.name) #输出v:0。“v”为变量的名称,“:0”表示这个变量时生成变量这个运算) #的第一个结果。 with tf.variable_scope("foo"): v2 = tf.get_variable("v",[1]) print (v2.name) #输出foo/v:0。在tf.variable_scope中创建的变量,名称前面会 #加入命名空间的名称,并通过/来分隔命名空间的名称和变量的名称。 with tf.variable_scope("foo"): with tf.variable_scope("bar"): v3 = tf.get_variable("v",[1]) print (v3.name) #输出foo/bar/v:0。命名空间可以嵌套,同时变量的名称也会加 #入所有命名空间的名称作为前缀。 v4 = tf.get_variable("v1",[1]) print (v4.name) #输出foo/v1:0。但命名空间退出之后,变量名称也就不会再被加入 #其前缀了。 #创建一个名称为空的命名空间,并设置reuse=True。 with tf.variable_scope("",reuse=True): v5 = tf.get_variable("foo/bar/v",[1]) #可以直接通过带命名空间名称的变量名 #来获取其他命名空间下的变量。比如这 #里通过指定名称foo/bar/v来获取在 #命名空间foo/bar/中创建的变量。 #输出True。 print (v5 == v3) v6 = tf.get_variable("foo/v1",[1]) print (v6 == v4)
运行结果如下:
v:0
foo/v:0
foo/bar/v:0
foo/v1:0
True
True