Python 在tensorflow.js中使用参差不齐的张量进行索引

Python 在tensorflow.js中使用参差不齐的张量进行索引,python,tensorflow,Python,Tensorflow,我试图用一个不规则的张量在tensorflow中索引一批 X = tf.constant([[[1,2,3], [4,5,6], [7,8,9]], [[9,8,7], [6,5,4], [3,2,1]]]) 第一个维度是批次,第二个维度是序列长度。 使用“聚集”,我可以选择单独的行和列 tf.gather_nd(X, [[[0, 1], [0, 2], [0, 0]], [[1, 0], [1, 1], [1, 2]]]) 但是我必须使用参差不齐的张量作为选择的输入

我试图用一个不规则的张量在tensorflow中索引一批

X = tf.constant([[[1,2,3], [4,5,6], [7,8,9]],
            [[9,8,7], [6,5,4], [3,2,1]]])
第一个维度是批次,第二个维度是序列长度。 使用“聚集”,我可以选择单独的行和列

tf.gather_nd(X, [[[0, 1], [0, 2], [0, 0]], [[1, 0], [1, 1], [1, 2]]])
但是我必须使用参差不齐的张量作为选择的输入。 比如说

tf.gather_nd(X, [[[0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]]])
这当然行不通。
是否有办法使上述代码正常工作?

您需要显式创建一个
RaggedTensor
对象,因为tensorflow无法自动识别它们:

>>> tf.gather_nd(X, tf.ragged.constant([[[0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]]], inner_shape=(2,)))
<tf.RaggedTensor [[[4, 5, 6], [7, 8, 9]], [[9, 8, 7], [6, 5, 4], [3, 2, 1]]]>
>>tf.聚集(X,tf.不规则常数([[0,1],[0,2],[[1,0],[1,1],[1,2]],内部形状=(2,))

但是,如果您的最终目标是过滤掉特定的批次,
tf.boolean_mask
(这可能更直接。

您不能像那样构建参差不齐的张量,您应该使用
tf.ragged.constant([[0,1],[0,2]],[[1,0],[1,1],[1,2]],内部形状=(2,))结果应该是一个不规则的张量,比如
[[4,5,6],[7,8,9],[[9,8,7],[6,5,4],[3,2,1]]
@jdehesa你完全正确,谢谢,我已经更新了。对我来说非常有用。谢谢你的帮助。