从字面上理解,就是变量的作用域管理器;
首先运行一个例子,然后在研究里面的代码
import tensorflow as tf
with tf.variable_scope("tjn"):
with tf.variable_scope("czj"):
m=tf.get_variable("v",[12])
assert m.name == "tjn/czj/v:0"
tf.variable_scope()是我们要研究的用法,不知道是什么意思,没关系;
tf.get_variable()是什么意思?
例子:tf.get_variable("v")获取v的变量,如果变量名为v的变量没有就创建,有的话就引用;
assert又是什么意思?
是断言,判断真假,如果为真就不报错继续执行,如果为假就抛出异常;
整个代码是判断m的变量作用域的名称是"tjn/czj/v:0"还是"tjn/czj/v:1"?
tj
现在是不是感觉有点懂了?
没关系,继续往下看
import tensorflow as tf
with tf.variable_scope("one"):
o=tf.get_variable("f",[1])
with tf.variable_scope("two"):
o1=tf.get_variable("f",[1])
assert o == o1
print("想等...")
你觉得是输出相等....还是抛出异常!
o与o1的变量名与值都是一样的,但是变量的作用域名不一样;我断定抛出异常
如果判断不相等,那么肯定能输出来后面的信息
现在我们来理解,tf.variable_scope()的意义,在大项目中,变量很多,第114行有一个v的变量,第339行又出现了v的变量,后面写代码都晕了,搞不清楚。怎么办?搞一个变量管理器,即使变量名一样,但是变量作用域不一样,引用的时候就不会出现穿插问题了,方便代码的维护;
我们现在再来看看一个例子:
在一个变量作用域中,出现了两个变量名与值都一样的o与o1,两个的作用域也一样;
是不是意味着o与o1相等呢?
import tensorflow as tf
with tf.variable_scope("one"):
o=tf.get_variable("f",[1])
o1=tf.get_variable("f",[1])
结果如下
百度了,一个变量的作用域名名不能一样,除非作用域设置了可重复使用,也就是reuse=tf.AUTO_REUSE