我有以下形状的两个张量:
tensor1 => shape(10, 99, 106)
tensor2 => shape(10, 99)
tensor2
包含的值范围为0 - 105
,我希望将其用于切片tensor1
的最后一个尺寸并获得形状的tensor3
tensor3 => shape(10, 99, 99)
我尝试使用:
tensor4 = tf.gather(tensor1, tensor2)
# this causes tensor4 to be of shape (10, 99, 99, 106)
另外,使用
tensor4 = tf.gather_nd(tensor1, tensor2)
# gives the error: last dimension of tensor2 (which is 99) must be
# less than the rank of the tensor1 (which is 3).
我正在寻找类似于numpy的cross_indexing的东西。
最佳答案
您可以使用tf.map_fn
:
tensor3 = tf.map_fn(lambda u: tf.gather(u[0],u[1],axis=1),[tensor1,tensor2],dtype=tensor1.dtype)
您可以将这条线看作是循环遍历
tensor1
和tensor2
的第一个维度,并且对于第一个维度中的每个索引i
,在tf.gather
和tensor1[i,:,:]
上应用tensor2[i,:]
。关于python - tensorflow :张量的交叉索引切片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47570804/