variable_scope的用法 发表于 2018-12-16 | 分类于 TensorFlow 字数统计: 353 | 阅读时长 ≈ 1 variable_scope的用法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#author:victor#import moduleimport tensorflow as tftf.reset_default_graph()tf.set_random_seed(1)#reproduciblewith tf.variable_scope('a_variable_scope') as scope: #常量初始化 initializer=tf.constant_initializer(value=3) var3=tf.get_variable(name='var3',shape=[1],dtype=tf.float32,initializer=initializer) var4=tf.Variable(name='var4',initial_value=[4],dtype=tf.float32) var4_reuse=tf.Variable(name='var4',initial_value=[4],dtype=tf.float32) #想要重复利用必须这么写: scope.reuse_variables()#如果不加这一句会报错,报Variable a_variable_scope/var3 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope var3_reuse=tf.get_variable(name='var3')with tf.Session() as sess: sess.run(tf.initialize_all_variables()) print(var3.name)#a_variable_scope/var3:0,variable_scope加上 print(sess.run(var4)) print(var4.name)#a_variable_scope/var4:0,variable_scope加上 print(sess.run(var4)) print(var4_reuse.name)#a_variable_scope/var4_1:0,variable_scope加上,重复利用的时候,并不是打印出var4:0,而是创建了一个新的var4_1 print(sess.run(var4_reuse)) print(var3_reuse.name)#a_variable_scope/var3:0,可以看到和var3一样了,为什么要重复利用呢? #因为同一个variable可能需要在不同的地方使用, #通常在RNN循环神经网络中,有一个重复循环的机制。通常在RNN中用到reuse_variable,通常Train RNN和Test RNN的神经网络结构不一样,但是其中的参数可能一样的,所以就会用到reuse variable... print(sess.run(var3_reuse)) """比如RNN结构"""class TrainConfig: batch_size=20 time_steps=20 input_size=10 output_size=2 cell_size=11 learning_rate=0.01 #但是RNN的test,有可能的time_steps改成1,但是不会用Train里的time_steps#所以就会用到reuse variable的time_steps class TestConfig(TrainConfig): time_steps=1 使用variable_scope的效果: