这是一个通用问题。我发现在 tensorflow 中,我们构建图之后,将数据提取到图中,图的输出是一个张量。但在很多情况下,我们需要根据这个输出(即一个tensor
)做一些计算,这在tensorflow中是不允许的。
例如,我正在尝试实现一个 RNN,它根据数据自身属性循环时间。也就是说,我需要使用 tensor
来判断是否应该停止(我没有使用 dynamic_rnn,因为在我的设计中,rnn 是高度定制的)。我发现 tf.while_loop(cond,body.....)
可能是我实现的候选者。但是官方教程太简单了。我不知道如何在“ body ”中添加更多功能。谁能给我几个更复杂的例子?
此外,在这种情况下,如果 future 的计算基于张量输出(例如:RNN 根据输出标准停止),这是非常常见的情况。有没有一种优雅的方式或者更好的方式来代替动态图?
最佳答案
是什么阻止了您为主体添加更多功能?您可以在正文中构建您喜欢的任何复杂计算图,并从封闭图中获取您喜欢的任何输入。此外,在循环之外,您可以使用返回的任何输出做任何您想做的事情。从“whatevers”的数量可以看出,TensorFlow 的控制流原语在构建时考虑了很多通用性。下面是另一个“简单”示例,以防万一。
import tensorflow as tf
import numpy as np
def body(x):
a = tf.random_uniform(shape=[2, 2], dtype=tf.int32, maxval=100)
b = tf.constant(np.array([[1, 2], [3, 4]]), dtype=tf.int32)
c = a + b
return tf.nn.relu(x + c)
def condition(x):
return tf.reduce_sum(x) < 100
x = tf.Variable(tf.constant(0, shape=[2, 2]))
with tf.Session():
tf.global_variables_initializer().run()
result = tf.while_loop(condition, body, [x])
print(result.eval())
关于python - 如何在 tensorflow 中使用 tf.while_loop(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441140/