Tensorflow:tf.while_loop(),带有向量条件

时间:2018-05-23 10:38:47

标签: tensorflow

函数tf.while_loop()(https://www.tensorflow.org/api_docs/python/tf/while_loop)重复身体" b"而条件" c"是真的。例如:

import tensorflow as tf    
i = tf.constant(0)
c = lambda i: tf.greater(10,i)
b = lambda i: tf.add(i, 1)
r = tf.while_loop(c, b, [i])

如果条件是向量,我该如何调整它,例如

c = lambda i: tf.greater([10,10],[i,i])

问题是上面的内容返回一个向量(而不是True或False),与例如一样。

tf.greater([2,2],[1,1])

当所有vector元素都为true时,我需要返回true,否则返回false。我建议

i = tf.constant(0)
c = lambda i: True if all(item == True for item in tf.greater([10,10],[i,i]))==True else False
b = lambda i: tf.add(i, 1)
r = tf.while_loop(c, b, [i])

但这不起作用,出现以下错误:

TypeError: `Tensor` objects are not iterable when eager execution is not enabled. To iterate over this tensor use `tf.map_fn`.

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

解决方案是使用tf.reduce_all():

i = tf.constant(0)
c = lambda i: tf.reduce_all(tf.greater([10,10],[i,i]))
b = lambda i: tf.add(i, 1)
r = tf.while_loop(c, b, [i])