Python 在tensorflow.js中使用参差不齐的张量进行索引
我试图用一个不规则的张量在tensorflow中索引一批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]]]) 但是我必须使用参差不齐的张量作为选择的输入
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你完全正确,谢谢,我已经更新了。对我来说非常有用。谢谢你的帮助。