TensorFlow共享变量功能实现

本文通过实例演示了如何在TensorFlow中利用variable_scope和get_variable实现变量共享。具体介绍了通过设置reuse参数为True来实现作用域内已定义变量的复用,这对于构建复杂的网络结构非常有用。
一 实例描述
使用作用域的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放到另一网络模型里去训练,而两个模型的训练结果都会作用于一个模型的学习参数中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值