gpt4 book ai didi

python - variable_scope 和 name_scope 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 21:35:43 24 4
gpt4 key购买 nike

variable_scopename_scope 有什么区别? variable scope tutorial谈论 variable_scope 隐式打开 name_scope。我还注意到,在 name_scope 中创建变量会自动使用范围名称扩展其名称。那么,有什么区别呢?

最佳答案

我无法理解 variable_scope 之间的区别和 name_scope (它们看起来几乎一样)在我尝试通过创建一个简单的示例来可视化所有内容之前:

import tensorflow as tf
def scoping(fn, scope1, scope2, vals):
with fn(scope1):
a = tf.Variable(vals[0], name='a')
b = tf.get_variable('b', initializer=vals[1])
c = tf.constant(vals[2], name='c')
with fn(scope2):
d = tf.add(a * b, c, name='res')

print '\n '.join([scope1, a.name, b.name, c.name, d.name]), '\n'
return d

d1 = scoping(tf.variable_scope, 'scope_vars', 'res', [1, 2, 3])
d2 = scoping(tf.name_scope, 'scope_name', 'res', [1, 2, 3])

with tf.Session() as sess:
writer = tf.summary.FileWriter('logs', sess.graph)
sess.run(tf.global_variables_initializer())
print sess.run([d1, d2])
writer.close()

在这里,我创建了一个函数,该函数创建一些变量和常量,并将它们分组到范围内(取决于我提供的类型)。在这个函数中,我还打印了所有变量的名称。之后,我执行图表以获取结果值的值并保存事件文件以在 tensorboard 中调查它们。如果你运行它,你会得到以下结果:

scope_vars
scope_vars/a:0
scope_vars/b:0
scope_vars/c:0
scope_vars/res/res:0

scope_name
scope_name/a:0
b:0
scope_name/c:0
scope_name/res/res:0

如果您打开 TB,您会看到类似的模式(您会看到 bscope_name 矩形之外): enter image description here


这会给你答案:

现在您看到 tf.variable_scope() 为所有变量(无论您如何创建它们)、操作、常量的名称添加了前缀。另一方面,tf.name_scope() 会忽略使用 tf.get_variable() 创建的变量,因为它假定您知道要使用哪个变量以及在哪个范围内。

关于 Sharing variables 的好文档告诉你

tf.variable_scope(): Manages namespaces for names passed to tf.get_variable().

相同的文档提供了变量范围如何工作以及何时有用的更多详细信息。

关于python - variable_scope 和 name_scope 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com