当我运行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)]))
答案 0 :(得分:2)
我通过删除Wout的tf.constant()修复了错误,因为Wout已经被声明为张量。
答案 1 :(得分:0)
通过(a)条件和正文的定义,以及(b)TensorFlow的完整错误输出(它通常还会在发出这些错误时输出输入张量的完整转储)来更容易诊断。)
话虽如此,问题的根源似乎是TensorFlow将您的loop_vars
列表视为单个Tensor,和/或您的cond2和test2函数每个只接受一个参数。如果这些都不是真的,那么提供更多细节将有助于回答问题(特别是完整的错误消息以及您传递给tf.while_loop.
的每个值/张量/函数的定义我已找到通过关注错误输出中的张量,可以修复大多数while_loop
错误。
while_loop
有时会引发相当混乱的错误,所以我想提供帮助;如果提供更多信息,我会检查并更新/编辑我的答案。