一 实例描述
使用作用域的reuse参数可以实现共享变量的功能。
可以通过get_variable实现共享变量的功能。
variable_scope里面有个,reuse=True属性,表示作用域中使用已经定义过的变量。这是get_variable将不会再创建新的变量,而是去图中get_variable所创建的变量中找与name相同的变量。
下面代码中演示了建立一个同样的scope,并且设置reuse=True,实现共享firstvar变量。
二 代码
import tensorflow as tf
tf.reset_default_graph()
#var1 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
#var2 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
with tf.variable_scope("test1", ):
var1 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
with tf.variable_scope("test2"):
var2 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
print ("var1:",var1.name)
print ("var2:",var2.name)
with tf.variable_scope("test1",reuse=True ):
var3 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
with tf.variable_scope("test2"):
var4 = tf.get_variable("firstvar",shape=[2],dtype=tf.float32)
print ("var3:",var3.name)
print ("var4:",var4.name)三 运行结果
var1: test1/firstvar:0
var2: test1/test2/firstvar:0
var3: test1/firstvar:0
var4: test1/test2/firstvar:0
四 说明
var1和var3的输出名字是一样的,var2和var4的名字也是一样的。这表明var1和var3共用了一个变量,var2和var4共用一个变量,这就实现了共享变量。
在实际应用中,可以把var1和var2放到一个网络模型去训练,把var3和var4放到另一网络模型里去训练,而两个模型的训练结果都会作用于一个模型的学习参数中。
本文通过实例演示了如何在TensorFlow中利用variable_scope和get_variable实现变量共享。具体介绍了通过设置reuse参数为True来实现作用域内已定义变量的复用,这对于构建复杂的网络结构非常有用。

2582

被折叠的 条评论
为什么被折叠?



