Python编程之tf.variable_scope()的用法,包你永不退还知识

从字面上理解,就是变量的作用域管理器;

首先运行一个例子,然后在研究里面的代码

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又是什么意思?

是断言,判断真假,如果为真就不报错继续执行,如果为假就抛出异常;

Python编程之tf.variable_scope()的用法,包你永不退还知识_第1张图片

 

整个代码是判断m的变量作用域的名称是"tjn/czj/v:0"还是"tjn/czj/v:1"?

 

Python编程之tf.variable_scope()的用法,包你永不退还知识_第2张图片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的变量名与值都是一样的,但是变量的作用域名不一样;我断定抛出异常

 

Python编程之tf.variable_scope()的用法,包你永不退还知识_第3张图片

 如果判断不相等,那么肯定能输出来后面的信息

Python编程之tf.variable_scope()的用法,包你永不退还知识_第4张图片

 


 现在我们来理解,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])

结果如下

Python编程之tf.variable_scope()的用法,包你永不退还知识_第5张图片

 

 百度了,一个变量的作用域名名不能一样,除非作用域设置了可重复使用,也就是reuse=tf.AUTO_REUSE

Python编程之tf.variable_scope()的用法,包你永不退还知识_第6张图片

 

 

你可能感兴趣的:(python编程专栏)