Python 为什么我们要在Tensorflow中命名变量?
在一些地方,我看到了语法,其中变量用名称初始化,有时不用名称。例如:Python 为什么我们要在Tensorflow中命名变量?,python,tensorflow,Python,Tensorflow,在一些地方,我看到了语法,其中变量用名称初始化,有时不用名称。例如: # With name var = tf.Variable(0, name="counter") # Without one = tf.constant(1) 将变量命名为var“counter”“counter”有什么意义?参数是可选的(您可以创建变量和常量,有或没有它),并且您在程序中使用的变量不依赖于它。名字在以下几个方面很有用: 当您想要保存或恢复变量时(您可以在计算之后进行)。发件人: 默认情况下,它为每个变量使
# With name
var = tf.Variable(0, name="counter")
# Without
one = tf.constant(1)
将变量命名为
var
“counter”“counter”有什么意义?参数是可选的(您可以创建变量和常量,有或没有它),并且您在程序中使用的变量不依赖于它。名字在以下几个方面很有用:
当您想要保存或恢复变量时(您可以在计算之后进行)。发件人:
默认情况下,它为每个变量使用Variable.name属性的值
变数
尽管如此,您仍有变量matrix_1
,matrix_2
,它们在文件中另存为v1
,v2
在TensorBoard中也使用了名称,以很好地显示边的名称。你甚至可以:
您可以将Python名称空间和TensorFlow名称空间想象为两个并行的世界。TensorFlow空间中的名称实际上是属于任何TensorFlow变量的“真实”属性,而Python空间中的名称只是在脚本运行期间指向TensorFlow变量的临时指针。这就是为什么在保存和恢复变量时,只使用TensorFlow名称的原因,因为脚本终止后Python名称空间不再存在,但TensorFlow名称空间仍然存在于保存的文件中。请考虑以下用例代码及其输出
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回溯(最近的调用)
最后)在()
10打印(sess123.run(fetches=[a]))
11
--->12 run123()
在run123()中
8 sess123.运行(初始化)
9打印(sess123.run(fetches=['test123:0']))
--->10打印(sess123.run(fetches=[a]))
11
12 run123()
NameError:未定义名称“a”
在f()的作用域中定义的“a”在其作用域之外不可用,即在run123()中。但是默认图必须用一些东西来引用它们,这样默认图可以根据需要在不同的范围内被引用,也就是说,当它的名称方便时。事实上,从区分不同变量的角度来看,我们完全可以使用python名称(赋值符号的左侧,我们将名称称为
python name
,以避免混淆。例如下面的示例中的v
)来命名变量。但是,在编程过程中,我们通常将python名称重新绑定到其他对象(例如Tensorflow中的op)
v = tf.get_variable("v1", [3], initializer = tf.zeros_initializer)
v = tf.get_variable("v2", [5], initializer = tf.zeros_initializer)
首先,python名称
v
从第一行绑定张量(tf.get_变量(“v1”[3],initializer=tf.zeros_initializer)
)。然后,v
从第二行重新绑定张量(tf.get_变量(“v2”[5],initializer=tf.zeros_initializer
)并且不再绑定第一个张量。如果我们没有给出tensorflow属性名称v1
和v2
,我们如何从第一行识别张量?我想指出,Martin Garrix复制了这段代码,将其作为其现场视频的一部分:
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()
v = tf.get_variable("v1", [3], initializer = tf.zeros_initializer)
v = tf.get_variable("v2", [5], initializer = tf.zeros_initializer)