我有一个创建Tensorflow图的预定义代码。变量包含在变量范围中,每个变量都有一个预定义的初始化程序。 有没有办法改变变量的初始化器?
例如: 第一个图定义了
with tf.variable_scope('conv1')
w = tf.get_variable('weights')
稍后我想修改变量并将初始化程序更改为Xavier:
with tf.variable_scope('conv1')
tf.get_variable_scope().reuse_variable()
w = tf.get_variable('weights',initializer=tf.contrib.layers.xavier_initializer(uniform=False))
但是,当我重用变量时,初始化程序不会改变。
稍后当我initialize_all_variables()
时,我得到默认值而不是Xavier
如何更改变量的初始值设定项?
感谢
答案 0 :(得分:3)
问题是在设置重用时无法更改初始化(初始化在第一个块期间设置)。
因此,只需在第一个变量范围调用期间使用xavier初始化来定义它。所以第一次调用就是,所有变量的初始化都是正确的:
with tf.variable_scope(name) as scope:
kernel = tf.get_variable("W",
shape=kernel_shape, initializer=tf.contrib.layers.xavier_initializer_conv2d())
# you could also just define your network layer 'now' using this kernel
# ....
# Which would need give you a model (rather just weights)
如果您需要重新使用这组权重,第二次调用可以获得它的副本。
with tf.variable_scope(name, reuse=True) as scope:
kernel = tf.get_variable("W")
# you can now reuse the xavier initialized variable
# ....