在TensoFlow中有两个作用域(Scope),一个时name_scope ,另一个是variable_scope。variable_scope主要给variable_name
加前缀,也可以给op_name
加前缀;name_scope给op_name
加前缀。
variable_scope
通过所给的名字创建或返回一个变量,并为变量指定命名空间,在Tensorflow 1.0版本示例代码如下:
当tf.compat.v1.get_variable_scope().resuse==False
时,variable_scope作用域只能用于创建新变量,示例代码如下:
导致上述程序的错误原因是:
ValueError: Variable foo/var already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?
变量foo/var已经存在了,但tf.compat.v1.get_variable_scope().resuse默认为False,所以不能重用。
当tf.compat.v1.get_variable_scope().resuse==True
时,作用域可以共享变量。示例代码如下:
如果在开启的一个变量作用域里使用之前预先定义的一个作用域,则会跳过当前变量的作用域,保持预先存在的作用域不变,示例如下:
变量作用域可以默认携带一个初始化器,在这个作用域中的子作用域或变量
都可以继承或者重写
父作用域初始化中的值,示例代码如下:
把最后一个断言值调整错误,验证程序执行情况:
对于op_name,在variable_scope作用域下的操作,也会被加上前缀,示例代码如下:
name_scope
TensorFlow中节点数非常多,在可视化的过程中很难全部展示出来,常 name_scope
作为变量划分范围,在可视化中,这表示计算图中的一个层级
。name_scope会影响op_name,但 不会影响get_variable()
创建的变量,而会影响通过Variable()
创建的变量,示例代码如下: