使用while_loop时的Tensorflow错误:“单个Tensor预期时的张量列表”

时间:2017-03-20 17:06:06

标签: tensorflow

当我运行Tensorflow while_loop时,我得到一个TypeError(“单个Tensor预期时的张量列表”)。根据文档,错误来自第三个参数,该参数应该是一个Tensors列表。 x,W,Win,Y,temp和Wout都先前被声明为浮点数和浮点数组。 cond2和test2是我写的条件和身体的函数。我在程序的早期使用几乎相同的调用,没有任何问题。

t=0
t,x,W,Win,Y,temp,Wout = sess.run(tf.while_loop(cond2, test2,
                                 [t, tf.Variable(x), tf.constant(W),
                                  tf.constant(Win), tf.Variable(Y),
                                  tf.Variable(temp), tf.constant(Wout)],
                                 shape_invariants=[tf.TensorShape(None),
                                                   tf.TensorShape(None),
                                                   tf.TensorShape(None),
                                                   tf.TensorShape(None),
                                                   tf.TensorShape(None),
                                                   tf.TensorShape(None),
                                                   tf.TensorShape(None)]))

2 个答案:

答案 0 :(得分:2)

我通过删除Wout的tf.constant()修复了错误,因为Wout已经被声明为张量。

答案 1 :(得分:0)

通过(a)条件和正文的定义,以及(b)TensorFlow的完整错误输出(它通常还会在发出这些错误时输出输入张量的完整转储)来更容易诊断。)

话虽如此,问题的根源似乎是TensorFlow将您的loop_vars列表视为单个Tensor,和/或您的cond2和test2函数每个只接受一个参数。如果这些都不是真的,那么提供更多细节将有助于回答问题(特别是完整的错误消息以及您传递给tf.while_loop.的每个值/张量/函数的定义我已找到通过关注错误输出中的张量,可以修复大多数while_loop错误。

while_loop有时会引发相当混乱的错误,所以我想提供帮助;如果提供更多信息,我会检查并更新/编辑我的答案。