假设我们有以下代码:
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
的操作,这两个变量是否要求值?
答案 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"])
启动图形时,必须先明确初始化变量,然后才能运行使用其值的Ops。
答案 1 :(得分:-1)
我相信正确的语法将是这样
results = sess.run(temp.values())
for name, val in zip(temp, results):
print name, val