张量流:将张量列表转换为在某个轴上具有固定暗淡的参差不齐的张量

tensorflow: convert a list of tensor to ragged tensor with a fixed dim in a certain axis

假设我有三个形状为 (1,3) 的 numpy 数组,并将它们堆叠成形状为 (2,3)(1,3) 的组。然后我将它们与 tf.ragged.stack 堆叠起来以获得参差不齐的张量:

x1 = np.asarray([1,0,0])
x2 = np.asarray([0,1,0])
x3 = np.asarray([0,0,1])

group_a = np.stack([x1,x2])
group_b = np.stack([x3])


ac = tf.ragged.stack([group_a,group_b], axis=0)

我希望它的形状是 (2, None, 3),但它是 (2, None, None)。如何获得所需的形状?我正在使用 tensorflow 2.5.2

发生这种情况是因为 tf.ragged.stack 正在创建一个等于 2 的 ragged_rank。查看 docs 了解更多信息。您可以像这样明确定义如何划分参差不齐的张量:

import tensorflow as tf
import numpy as np

x1 = np.asarray([1,0,0])
x2 = np.asarray([0,1,0])
x3 = np.asarray([0,0,1])

ac = tf.RaggedTensor.from_row_splits(
    values=[x1, x2, x3],
    row_splits=[0, 2, 3])

print(ac.shape)
print(ac)
(2, None, 3)
<tf.RaggedTensor [[[1, 0, 0], [0, 1, 0]], [[0, 0, 1]]]>

这个问题其实官方帮助已经回答了: https://www.tensorflow.org/api_docs/python/tf/RaggedTensor#get_shape

x1=[[0, 1, 2]]
x2=[[1, 2, 3], [3, 4, 6]]

tf.ragged.constant([x1, x2], ragged_rank=1).shape
Out[51]: TensorShape([2, None, 3])