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

时间:2019-01-18 13:25:23

标签: python tensorflow deep-learning

在这种情况下,我有一个张量,其第一个维度为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)])

我该如何处理动态形状?

2 个答案:

答案 0 :(得分:0)

如果您确实想这样做,可以使用tf.map_fn

否则,您可以尝试直接处理原始张量(第一维=无)并在适当的轴上执行操作(无需循环)

答案 1 :(得分:0)

使用tf.map_fn和tf.scan在Tensor Flow中可以对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()会自动堆叠所有返回的张量