我想从TensorFlow 2.0中的张量列表中创建一个参差不齐的张量,如下所示:
a = tf.convert_to_tensor([1,2])
b = tf.convert_to_tensor([1,2,3])
tf.ragged.constant([a, b])
但这会抛出ValueError: TypeError: Scalar tensor has no `len()`
。另一方面,下面的代码从列表列表中创建一个参差不齐的张量,效果很好。
a = [1,2]
b = [1,2,3]
tf.ragged.constant([a,b])
有什么方法可以直接从张量列表中创建参差不齐的张量,而无需先将张量转换为python列表吗?
答案 0 :(得分:4)
您可以使用tf.ragged.stack
:
>>> a = tf.convert_to_tensor([1,2])
>>> b = tf.convert_to_tensor([1,2,3])
>>> tf.ragged.stack([a, b])
<tf.RaggedTensor [[1, 2], [1, 2, 3]]>
答案 1 :(得分:1)
您可以在tf.RaggedTensor
中使用不同的from_*
方法构造参差不齐的张量。对于您的情况,您可以使用例如from_row_lengths
:
import tensorflow as tf
def stack_ragged(tensors):
values = tf.concat(tensors, axis=0)
lens = tf.stack([tf.shape(t, out_type=tf.int64)[0] for t in tensors])
return tf.RaggedTensor.from_row_lengths(values, lens)
a = tf.convert_to_tensor([1, 2])
b = tf.convert_to_tensor([1, 2, 3])
print(stack_ragged([a, b]))
# <tf.RaggedTensor [[1, 2], [1, 2, 3]]>