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.")`
当我通过张量时它起作用,但是当我传递名字时它不起作用。 为什么我不能在这种情况下传递名字?
答案 0 :(得分:1)
TensorFlow中的元组不是张量,而是张量列表,因此无法通过图形中的操作作为整体提取。 tf.tuple
将创建一些分组和依赖关系控制操作(在这种情况下为initial_state/group_deps
,initial_state/control_dependency
和initial_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])]`