是否对获取到会话的run方法的每个张量进行了评估?

时间:2018-07-05 17:54:16

标签: python tensorflow

假设我们有以下代码:

import tensorflow as tf


temp = {"first": tf.Variable(1.0), "second": tf.Variable(2.0)}

with tf.Session() as sess:
    sess.run(temp)
    print(temp["first"])
    print(temp["second"])

如果您在包含两个TensorFlow变量的字典(例如sess.run())上进行temp的操作,这两个变量是否要求值?

2 个答案:

答案 0 :(得分:1)

run类状态的Session方法的documentation

  

run(fetches, feed_dict=None, options=None, run_metadata=None)

     

运行操作并评估fetches中的张量。

     

此方法运行TensorFlow计算的一个“步骤”,方法是运行必要的图形片段以执行每个操作并评估fetches中的每个Tensor,然后将feed_dict中的值替换为相应的输入值。

     

fetches参数可以是单个图形元素,也可以是在其叶子处包含图形元素的任意嵌套的列表,元组,namedtuple,dict或OrderedDict。

在您的情况下,temp(a dict)是您传递给fetches的“ run”。因此,将评估temp中的每个运算或张量。

如果我什么都没错过,那么文档中就没有任何关于评估顺序的信息,而且我认为,您不应该假定操作或张量是按特定顺序评估的,因为这可能是可能会有所更改(例如,由于优化)。

因此,要直接回答您的问题:是的,将评估每个变量/张量(作为会话的fetches方法的run传递)。

此外,请注意您的代码也有问题,例如是

import tensorflow as tf


temp = {"first": tf.Variable(1.0), "second": tf.Variable(2.0)}

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(temp)
    print(temp["first"])
    print(temp["second"])

documentation for Variable声明

  

启动图形时,必须先明确初始化变量,然后才能运行使用其值的Ops。

答案 1 :(得分:-1)

我相信正确的语法将是这样

results = sess.run(temp.values())
for name, val in zip(temp, results):
  print name, val