我使用tf.placeholder()
形状[None, None, 10]
将输入传递给张量。现在我想迭代输入的第一个维度,并将一些函数应用于该维度中的每个切片。但是,当我尝试使用Python for
循环执行此操作时,我收到一条错误消息,指出Tensor
个对象“不可迭代”。
有什么方法可以将输入作为形状[None, 10]
的张量列表传递,我怎样才能将此列表分配给占位符?或者是否有其他方法来迭代Tensor
的维度?
答案 0 :(得分:2)
可以使用新的tf.map_fn()
,tf.foldl()
tf.foldr()
或(最常见的)tf.scan()
高阶运算符,这些运算符已添加到版本0.8中的TensorFlow中。您将使用的特定运算符取决于您要执行的计算。例如,如果要在张量的每一行上执行相同的功能并将元素打包回单个张量,则可以使用tf.map_fn()
:
p = tf.placeholder(tf.float32, shape=[None, None, 100])
def f(x):
# x will be a tensor of shape [None, 100].
return tf.reduce_sum(x)
# Compute the sum of each [None, 100]-sized row of `p`.
# N.B. You can do this directly using tf.reduce_sum(), but this is intended as
# a simple example.
result = tf.map_fn(f, p)
答案 1 :(得分:0)
您应该将输入作为单个张量x
的形状[无,无,10]传递,然后使用tf.split(0, -1, x)
获取可以迭代的张量列表。