如何评估TensorFlow元组?

时间:2018-04-14 09:50:34

标签: python tensorflow

import tensorflow as tf

a = tf.zeros([10])
b = tf.zeros([10])
state = tf.tuple([a, b], name='initial_state')

with tf.Session() as sess:
    s = sess.run('initial_state:0')

我在这个例子中遇到以下错误:

ValueError: Fetch argument 'initial_state' cannot be interpreted as a Tensor.
("The name 'initial_state' refers to an Operation not in the graph.")`

当我通过张量时它起作用,但是当我传递名字时它不起作用。 为什么我不能在这种情况下传递名字?

2 个答案:

答案 0 :(得分:1)

TensorFlow中的元组不是张量,而是张量列表,因此无法通过图形中的操作作为整体提取。 tf.tuple将创建一些分组和依赖关系控制操作(在这种情况下为initial_state/group_depsinitial_state/control_dependencyinitial_state/control_dependency_1),但这是关于它的。

由于state是一个列表,因此它是fetches的有效Session#run参数。还可以从每个元组元素构建一个操作名称列表,然后使用它。

s = sess.run(['zeros:0', 'zeros_1:0'])
# [
#  array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32),
#  array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)
# ]

答案 1 :(得分:0)

@ E_net4的答案会很好。但是首先,您应该知道tf.tuple的工作方式。 如tf.tuple文档中所述

tf.tuple( tensors, control_inputs=None, name=None )

您必须按照说明进行操作。但是由于没有示例,所以很难理解,所以请参阅我的文章:

import tensorflow as tf
a = tf.Variable([5])

b = tf.Variable([6])

c = a+b
d = a*b
e = a/b

ops = tf.tuple([c,d,e])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    ee = sess.run(ops)
    print(ee)

ops = tf.tuple([tensor1,tensor2,...],control_inputs=c_ops)

输出显示:

[array([11], dtype=int32), array([30], dtype=int32), array([0.83333333])]`