函数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`.
有什么想法吗?
答案 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])