tensorflow变量作用域和创建

首先明白下面三点

  • tf.name_scope()和tf.variable_scope()是两个作用域,

  • tf.variable() 和tf.get_variable()这两个函数在作用域中创建/调用变量

  • 它们搭配在一起的两个常见用途:
    1)变量共享
    2)tensorboard画流程图时为了可视化封装变量

用途1: 共享变量
TensorFlow (TF) 中,name_scope 和 variable_scope 主要是因为 变量共享 的需求。为什么要共享变量?举个简单的例子:例如,GAN网络,判别器的任务是如果接收到的是生成器生成的图像,判别器就尝试优化自己的网络结构来使自己输出0,如果接收到的是来自真实数据的图像,那么就尝试优化自己的网络结构来使自己输出1。也就是说,生成图像和真实图像经过判别器的时候,要共享同一套变量,所以TensorFlow引入了变量共享机制。

变量共享的方法:
resue方式一: v1=v
with tf.variable_scope("foo"):
	v = tf.get_variable("v",[1])
with tf.variable_scope("foo",reuse=True):
	v1 = tf.get_variable("v",[1])  # 这里v1会调用上面定义的v,而不是重新定义
assert v1=v

resue方式二: v1=v
with tf.variable_scope("foo"as scope:
	v = tf.get_variable("v",[1])  
	scope.reuse_variables()
	v1 = tf.get_variable("v",[1]) # 这里v1会调用上面定义的v,而不是重新定义
assert v1=v

“共享变量” 的应用场景:RNN应用例子
在tf.variable_scope的作用域下,通过get_variable()使用已经创建的变量,实现了变量的共享。在 train RNN 和 test RNN 的时候, RNN 的 time_steps 会有不同的取值, 这将会影响到整个 RNN 的结构, 所以导致在 test 的时候, 不能单纯地使用 train 时建立的那个 RNN. 但是 train RNN 和 test RNN 又必须是有同样的 weights biases 的参数. 所以, 这时, 就是使用 reuse variable 的好时机.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值