TensorFlow 变量管理

当神经网络的结构非常复杂,参数非常多时,这时就需要一个非常好的方式来传递和管理神经网络中的参数。TensorFlow提供了通过变量名称来创建或者获取一个变量的机制。通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递。

TensorFlow种通过变量名称获取变量的机制主要是通过 tf.get_variable 和 tf.variable_scope 函数来实现的,下面分别介绍下。

我们大家都知道TensorFlow普通的方法来创建一个变量是通过 tf.Variable 函数。除了 tf.Variable 函数,TensorFlow 还提供了 tf.get_variable 来创建或者获取变量,在创建变量时,这两个的功能是基本等价的,可以看下面一个例子:


这里顺便通过下表介绍一下TensorFlow种变量7种初始化函数的功能和主要参数:


注意:虽然创建变量时,这两个功能是基本等价的,但是 假如这个变量名为“v”的变量已经存在,这两个功能是不等价的。

下面详细讲解下如果碰到上面这种情况的区别:

对于 tf.Variable 函数,变量名称是一个可选的参数,遇到上面的情况并不会报错而是会自己处理,可以通过下面代码实际感受一下:

import tensorflow as tf

a = tf.Variable(3,name="x")
b = tf.Variable(1,name="x")

print a.name+"\n"+b.name

#最终输出为:
#x:0
#x_1:0
但是对于 tf.get_variable 函数,变量名称是一个必填的参数。如果已经有同名的参数(创建失败),那么这个程序就会报错。这样通过使用 tf.get_variable 函数就可以避免无意识的变量复用造成的错误。

如果需要通过 tf.get_variable 获取一个已经创建的变量,需要通过 tf.variable_scope函数来生成一个上下文管理器,使用方法和注释可见下面这段代码:


当 tf.variable_scope 函数使用参数 reuse=True 生成上下文管理器时,这个上下文管理器所有的 tf.get_variable 函数回直接获取已创建的变量。如果变量不存在, tf.get_variable 函数会报错。 如果 tf.variable_scope 函数使用参数 reuse=None 或者 reuse=False 创建上下文管理器, tf.get_variable 操作将创建新的变量,如果同名变量已经存在,则 tf.get_variable 报错。


下面看一下 tf.variable_scope 函数的嵌套用法和注释:



以下代码展示了如何通过 tf.variable_scope 来管理变量的名称:



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值