在张量流中的 None 维度上迭代张量



如果我有一个张量,其第一维对应于批量大小,例如:

tensor = tf.placeholder(tf.float32, shape=[None, 256, 256,3],name="placeholder_input")

现在我有一个张量函数"myfunc",作用于大小为 [256,256,3] 的张量,我想应用与批处理数一样多的次数,以获得大小为 [None, 256, 256,3] 的输出。如果形状不是动态的,我会简单地做:

output_tensor = tf.stack([myfunc(tensor [k,:,:,:] for k in range(BATCH_SIZE)])

我该如何处理动态形状?

如果你真的想这样做,你可以使用tf.map_fn

否则你可以尝试直接处理原始张量(第一维 = None)并在正确的轴上进行操作(无需循环)

可以使用

tf.map_fn和tf.scan在张量流中迭代None,但在构建任何图形之前,请确保禁用了渴望执行。

可以使用以下方法完成:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()

你可以做这样的事情:

tensor = tf.compat.v1.placeholder(dtype=tf.float32, shape=[None, 256, 256,3],name="placeholder_input")
output_tensor = tf.map_fn(lambda x : x, elems=(tensor))

输出:

<tf.Tensor 'map/TensorArrayV2Stack/TensorListStack:0' shape=(None, 256, 256, 3) dtype=float32>

这里不需要tf.stack,因为tf.map_fn()会自动堆叠所有返回的张量

最新更新