scope.reuse_variables()与重新创建范围不同吗?

时间:2019-02-27 07:12:21

标签: python tensorflow

我想在第一次调用时为RBM创建模型权重,然后再使用它们。我尝试了两种方法:

  1. 使用scope.reuse_variables():

    with tf.variable_scope("RBM_1") as scope:
        rbm = self.train_rbm(v, num_train, num_units)
        scope.reuse_variables()
        rbm_stack.append(rbm)
        v_data = rbm.sample_h_given_v(v_data)
        v = Dataset(v_data)
    

但是,当我稍后尝试重用在“ RBM_1”范围下定义的变量时,

var = tf.get_variable("RBM_1/W")

我收到ValueError:变量RBM_1 / W已经存在,不允许使用。您是要在VarScope中设置“ reuse = True”还是“ reuse = tf.AUTO_REUSE”?

  1. 通过重新创建范围:

    with tf.variable_scope("RBM_1") as scope:
            rbm = self.train_rbm(v, num_train, num_units)
            rbm_stack.append(rbm)
            v_data = rbm.sample_h_given_v(v_data)
            v = Dataset(v_data)
    
    with tf.variable_scope("RBM_1", reuse=True):
            var = tf.get_variable("W")
    

,这很好。我的问题是,第一种方法为什么不起作用?我也尝试在第一种方法中传递参数复用= tf.AUTO_REUSE,但是即使这样也没有用。

谢谢!

0 个答案:

没有答案