当前位置: 代码迷 >> 综合 >> Sharing Variables in Tensorflow
  详细解决方案

Sharing Variables in Tensorflow

热度:27   发布时间:2023-12-18 11:04:29.0

      在深度学习的训练过程中,为了减少训练参数数量,或是在不同计算机上并行运算,我们往往需要共享变量。Tensorflow中的变量共享主要是通过tf.variable_scope和tf.variable来实现。

       tf.variable_scope()主要是对于图中大量变量进行批量化管理,域内的变量会被加上同一个前缀名,同时该函数还会自动生成一个同名name_scope(),故域内节点也会加上此前缀。因为同名的变量在运行时会报错,所以此方法减小了命名的麻烦,并让整个graph的变量和节点显得很有层次感。在variable_scope下,我们可以创建新的变量,也可以通过设置reuse参数允许使用已有的变量,具体来说都是通过tf.get_variable()来实现的。

tf.variable_scope(name_or_scope, reuse=None,initializer=None)

我们可以看到,这个函数有3个形参:name_or_scope为域内所有变量指定同一个前缀,reuse设定是否需要重用域内的变量(默认是False所以如果用到了变量重用需要专门设置为True),initializer为域内所有变量指定了初始化方法。

在tf.variable_scope()下创建变量的例子:

with tf.variable_scope("foo"): with tf.variable_scope("bar"):v = tf.get_variable("v", [1])           assert v.name == "foo/bar/v:0"

在tf.variable_scope()下重用变量的例子:

with tf.variable_scope("foo"):v = tf.get_variable("v", [1])
with tf.variable_scope("foo",reuse=True): v1 = tf.get_variable("v", [1])
assert v1 == v
同样都是建立变量,tf.Variable()每次调用时都会建立新的变量,而tf.get_variable()在tf.variable_scope()指定了reuse模式时,会先根据变量名搜索已有的变量,如果发现了就可拿来用,从而实现变量的共享。

  相关解决方案