为什么我们在Tensorflow中命名变量?
python
tensorflow
5
0

在某些地方,我看到了语法,其中用名称初始化变量,有时不使用名称初始化。例如:

# With name
var = tf.Variable(0, name="counter")

# Without
one = tf.constant(1)

给变量var "counter"命名的意义是什么?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

您可以将Python命名空间和TensorFlow命名空间想象为两个并行的Universe。 TensorFlow空间中的名称实际上是属于任何TensorFlow变量的“真实”属性,而Python空间中的名称只是在脚本运行期间指向TensorFlow变量的临时指针。这就是为什么在保存和还原变量时仅使用TensorFlow名称的原因,因为在脚本终止后Python名称空间不再存在,而Tensorflow名称空间仍保存在文件中。

收藏
评论

name参数是可选的(可以创建带有或不带有它的变量和常量),并且在程序中使用的变量不依赖于它。名称在两个地方可能会有所帮助:

当您要保存或还原变量时 (可以在计算后将它们保存到二进制文件中 )。从文档

默认情况下,它为每个变量使用Variable.name属性的值

matrix_1 = tf.Variable([[1, 2], [2, 3]], name="v1")
matrix_2 = tf.Variable([[3, 4], [5, 6]], name="v2")
init = tf.initialize_all_variables()

saver = tf.train.Saver()

sess = tf.Session()
sess.run(init)
save_path = saver.save(sess, "/model.ckpt")
sess.close()

但是,您拥有变量matrix_1matrix_2它们被另存为文件v1v2

TensorBoard中也使用名称来很好地显示边的名称 。您甚至可以使用相同的范围将它们分组

import tensorflow as tf

with tf.name_scope('hidden') as scope:
  a = tf.constant(5, name='alpha')
  W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights')
  b = tf.Variable(tf.zeros([1]), name='biases')
收藏
评论

考虑以下用例代码及其输出

def f():
    a = tf.Variable(np.random.normal(), dtype = tf.float32, name = 'test123')

def run123():
    f()
    init = tf.global_variables_initializer()
    with tf.Session() as sess123:
        sess123.run(init)
        print(sess123.run(fetches = ['test123:0']))
        print(sess123.run(fetches = [a]))

run123()

输出:

[0.10108799]

()最近一次调用NameError Traceback(最近一次调用)10 print(sess123.run(fetches = [a]))11-> 12 run123()

在run123()中8 sess123.run(init)9 print(sess123.run(fetches = ['test123:0'])))-> 10 print(sess123.run(fetches = [a]))11 12 run123 ()

NameError:名称“ a”未定义

在f()范围内定义的'a'在其范围之外(即在run123()中)不可用。但是默认图必须用某种东西来引用它们,以便可以根据需要在各个范围内引用默认图,也就是说,当它的名称派上用场时。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号