Tensorflow 为什么要使用tf.name\u scope()
我一直在读他们写的TensorFlow教程Tensorflow 为什么要使用tf.name\u scope(),tensorflow,Tensorflow,我一直在读他们写的TensorFlow教程 with tf.name_scope('read_inputs') as scope: # something 榜样 a = tf.constant(5) 及 似乎也有同样的效果。那么,为什么我们要使用name\u scope?它们不是一回事 import tensorflow as tf c1 = tf.constant(42) with tf.name_scope('s1'): c2 = tf.constant(42) prin
with tf.name_scope('read_inputs') as scope:
# something
榜样
a = tf.constant(5)
及
似乎也有同样的效果。那么,为什么我们要使用
name\u scope
?它们不是一回事
import tensorflow as tf
c1 = tf.constant(42)
with tf.name_scope('s1'):
c2 = tf.constant(42)
print(c1.name)
print(c2.name)
印刷品
Const:0
s1/Const:0
顾名思义,scope函数为您在其中创建的操作的名称创建一个作用域。这对如何引用张量、重用、在TensorBoard中如何显示图形等都有影响。我看不到重用常量的用例,但这里有一些关于范围和变量共享的相关信息 范围
将把scope作为前缀添加到所有操作中name\u scope
将把scope作为前缀添加到所有变量和操作中variable\u scope
tf.Variable()
构造函数忽略tf.get\u variable()
,只在name前面加上当前name\u范围
variable\u范围
带有tf.variable\u scope(“variable\u scope”):
使用tf.name\u scope(“name\u scope”):
var1=tf.get_变量(“var1”,[1])
使用tf.variable_scope(“variable_scope”):
使用tf.name\u scope(“name\u scope”):
var2=tf.Variable([1],name=“var2”)
产生
var1=
var2=
重用变量
- 始终使用
定义共享变量的范围tf.variable\u scope
- 执行重用变量的最简单方法是使用
,如下所示reuse\u variables()
带有tf.variable_scope(“scope”):
var1=tf.get_变量(“variable1”[1])
tf.get_variable_scope().重用_variables()
var2=tf.get_变量(“variable1”[1])
断言var1==var2
总是创建一个新变量,当一个变量用一个已经使用过的名称构造时,它只是在它后面附加tf.Variable()
,\u 1
等-这可能会导致冲突:(\u 2
- 我将尝试使用一些松散但易于理解的语言来解释
名称范围
通常用于将一些变量组合在一个op中。也就是说,它给出了关于此op中包含多少变量的解释。但是,对于这些变量,不考虑它们的存在。您只知道,好的,要完成此op,我需要准备这个、这个和这个变量。实际上,在使用
tensorboard
时,它会有所帮助你可以把变量绑定在一起,这样你的图就不会乱七八糟了
可变范围
将其视为一个抽屉。与名称空间相比,这更具有“物理”意义,因为这样的抽屉确实存在;相反,名称空间只是帮助理解包含哪些变量
自变量空间以来“物理”存在,所以它限制了,因为这个变量已经存在,你不能重新定义它,如果你想多次使用它们,你需要指出
重用
谢谢你的回答。你能告诉我如何重用c1和c2吗?@VibhorKanojia将它们定义为tf.变量吗?问得好!
Const:0
s1/Const:0