管理变量的变量空间
方法一:tf.variable_scope()
reuse=False——get_variable()函数将创建新的变量,此时的name属性不可以与已经存在的变量相同
=True——get_variable()函数直接获取name属性相同的已经存在的变量
无论get_variable()还是variable()都会被添加变量空间的名称前缀
方法二:tf.name_scope()
使用get_variable()函数生成的变量名称不会添加变量空间的名称前缀,variable()会被添加变量空间的名称前缀
函数详解
tf.variable_scope(name_or_scope,default_name=None,values=None,initializer=None,regularizer=None,caching_device=None,partitioner=None,custom_getter=None,reuse=None,dtype=None)
使用variable_scope()函数创建变量空间时,在空间内部创建的变量名称都会带上这个变量空间的名称作为前缀,
参数:
name_or_scope: `string或VariableScope:要打开的范围
default_name: 如果name_or_scope参数为None,则将使用默认名称,此名称将被唯一。 如果提供了name_or_scope,它将不 会被使用,因此它不是必需的,可以是None。
values:传递给op函数的Tensor参数列表
initializer: 此范围内的变量的默认初始化程序
regularizer:此范围内的变量的默认正则符
caching_device:此范围内的变量的默认缓存设备
partitioner:此范围内变量的默认分区
custom_getter:此范围内变量的默认定制getter
reuse=False——get_variable()函数将创建新的变量,此时的name属性不可以与已经存在的变量相同
=True——get_variable()函数直接获取name属性相同的已经存在的变量
dtype:在此范围中创建的变量类型(默认为传递范围中的类型,或从父范围继承)
use_resource=False(默认值),则所有变量都将是常规变量。
=True,明确语义的experimental ResourceVariables变量
当启用eager执行时,此参数始终强制为True
constraint :
auxiliary_name_scope:
返回
返回一个用于定义创建variable(层)的op的上下文管理器。
案例1,reuse的使用
import tensorflow as tf
#在变量空间“one"中创建变量a
with tf.variable_scope("one",reuse=False):
a1=tf.get_variable('a',[3,3],initializer=tf.truncated_normal_initializer(stddev=0.1))
#在变量空间“one"中创建变量a1,
with tf.variable_scope("one",reuse=False):
a2=tf.get_variable('a1',[3,3],initializer=tf.truncated_normal_initializer(stddev=0.1))
#获取变量空间“one"中创建变量a1,
with tf.variable_scope("one",reuse=True):
a3=tf.get_variable('a1')
with tf.Session() as sess:
tf.global_variables_initializer().run()
a1,a2,a3=sess.run([a1,a2,a3])
print(a1)
print(a2)
print(a3)
输出结果:可以看出,a3=a2
a1——
[[ 0.02218279 -0.0762048 -0.08831318]
[-0.14949541 -0.11146082 -0.07375276]
[ 0.06056631 -0.08629142 0.01646093]]
a2——
[[-0.09969015 -0.08382337 -0.1366466 ]
[-0.07004079 -0.00893326 -0.09068973]
[ 0.03591403 0.10408155 -0.00444596]]
a3——
[[-0.09969015 -0.08382337 -0.1366466 ]
[-0.07004079 -0.00893326 -0.09068973]
[ 0.03591403 0.10408155 -0.00444596]]