我有一个2D Tensor
,每行包含一个数据点。图形构建时未知数据大小。我需要将数据Tensor转换为RNN的批处理作为3D Tensor,其中新元素用零填充。在图构建时,不知道序列长度和序列数。序列长度为tf.placeholder
,数据张量是先前TF操作的输出。我该怎么转
# Data
[[1 1]
[1 1]
[2 2]
[3 3]
[3 3]
[3 3]]
# Sequence lengths
[2 1 3]
进入这个
[[[1 1]
[1 1]
[0 0]]
[[2 2]
[0 0]
[0 0]]
[[3 3]
[3 3]
[3 3]]]
tf.split
+ tf.pad
+ tf.concat
方法不起作用,因为在图构建时不知道序列数,tf.split
需要num_or_size_splits
参数有固定的形状。
tf.dynamic_partition
+ tf.stack
方法使用tf.while_loop
从序列长度生成的分区索引不起作用,因为num_partitions
的{{1}}参数需要是固定的整数,而不是Tensor,并且在图形构建时不知道序列的数量。
tf.dynamic_partition
+ tf.scatter_update
方法使用tf.reshape
从序列长度生成的行索引和行值不起作用,因为tf.while_loop
需要tf.scatter_update
和{ {1}}需要固定的大小(数据大小Tensor在图构建时不知道)。
我可以在图形构建时修复批量大小,但这导致需要在批量大小更改时重建图形,因此我不想这样做。
这可能实现吗?