重塑 Tensorflow 不规则张量

Reshape Tensorflow RaggedTensor

我有一个形状为 (batch_size、None、None、100 的 4D RaggedTensor,我想从中创建一个形状为 (batch_size , None, 100).所以基本上合并一维和二维,但不包括任何填充 ([1,2,3], [4] => [1,2,3,4]) 并且不首先转换为密集张量。 有没有办法做到这一点?如果不是,可以解决什么问题?

经过更多的阅读和尝试,我找到了答案,这需要对两个维度中的每一个使用两次 row_starts。 结果像这样:

row_starts = [my_ragged_tensor.values.row_starts()[row_start]
                      for row_start in my_ragged_tensor.row_starts()]

my_ragged_tensor_flat = tf.RaggedTensor.from_row_starts(my_ragged_tensor.flat_values, row_starts)

这会将“my_ragged_tensor”的形状从 (batch_size, None, None, 100) 更改为 (batch_size, None, 100) 合并两个中间维度。

编辑:

更简单的方法my_ragged_tensor.merge_dims(1,2)