Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我们要在Tensorflow中命名变量?_Python_Tensorflow - Fatal编程技术网

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)