tensorflow的变量命名空间问题

2022-02-23

tf. tf 之间的区别。和 tf。就是前者有变量检查机制,会检测一个已有变量是否设置为共享变量。如果现有变量没有设置为共享变量,会一直运行,直到第二个具有相同的变量名时,才会报错。后者会直接复制生成新的变量。

import tensorflow as tf 
with tf.variable_scope('a_1'):
    a = tf.Variable(1, name='a')
    b = tf.Variable(1, name='a')
    print(a.name) # a_1/a:0
    print(b.name) # a_1/a_1:0 

    c = tf.get_variable('a', 1) 
    print(c.name) # a_1/a_2:0
    d = tf.get_variable('a', 1) 
    print(d.name) # ValueError: Variable a_1/a already exists, disallowed. 
                  #Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:

为了解决以上问题,tf.提出函数:它的主要作用是在一个作用域内共享一些变量,这些变量可以通过reuse来复用。

import tensorflow as tf 
with tf.variable_scope("a_1"):
    a = tf.get_variable("v", [1])
    print(a.name) # a_1/v:0

with tf.variable_scope("a_1", reuse = True): #注意reuse的作用。
    c = tf.get_variable("v", [1]) 
    print(c.name) # a_1/v:0
print(a is c) # True, 两个变量重用了,变量地址一致

对于 tf.,tf.只能控制tf的名字。函数操作Ops,但不是变量名,但是他可以控制tf.创建的变量,看下面的例子:

import tensorflow as tf 
with tf.name_scope('a_1'):
    with tf.name_scope('a_2'):
        with tf.variable_scope('a_3'):
            d = tf.Variable(1, name='d')
            d_1 = tf.Variable(1, name='d')
            d_get = tf.get_variable('d', 1)
            x = 1.0 + d_get
            print(d.name)    #输出a_1/a_2/a_3/d:0
            print(d_1.name) #输出a_1/a_2/a_3/d_1:0
            print(d_get.name) #输出a_3/d:0
            print(x.name) # 输出a_1/a_2/a_3/add:0

        with tf.variable_scope('a_3'):
            e = tf.Variable(1, name='d')
            print(e.name)    #输出a_1/a_2/a_3_1/d:0

参考:1.

2.

分类:

技术要点:

相关文章:

© 版权声明
THE END
喜欢就支持一下吧
点赞5赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容