Python 在Tensorflow中,有没有一种方法可以使用散射来排列成批的张量,而不必拆下张量?
例如,假设我的输入张量的维数为ssPython 在Tensorflow中,有没有一种方法可以使用散射来排列成批的张量,而不必拆下张量?,python,tensorflow,keras,neural-network,tensor,Python,Tensorflow,Keras,Neural Network,Tensor,例如,假设我的输入张量的维数为ss(bs、nv、dims) 我有另一个形状指数的张量(bs,nv) 我希望输入中的元素按索引中给定的顺序排列 因此,如果输入张量为[[1,1],[2,2],[3,3],[4,4]],即bs=1,nv=4和dims=2,索引为[[2,1,3,0] 我希望输出是[[4,4],[2,2],[1,1],[3,3]]] 请注意,如果使用tf.scatter\u nd(..),则这很容易做到 我真正感兴趣的是当bs>1时 注意:使用GARGE无法实现这一点,因为如果使用GAR
(bs、nv、dims)
我有另一个形状指数的张量(bs,nv)
我希望输入中的元素按索引中给定的顺序排列
因此,如果输入张量为[[1,1],[2,2],[3,3],[4,4]]
,即bs=1
,nv=4
和dims=2
,索引为[[2,1,3,0]
我希望输出是[[4,4],[2,2],[1,1],[3,3]]]
请注意,如果使用tf.scatter\u nd(..)
,则这很容易做到
我真正感兴趣的是当bs>1
时
注意:使用GARGE无法实现这一点,因为如果使用GARGE,它将为您提供[[[3,3],[2,2],[4,4],[1,1]]
,这与上下文不符
当前解决方案:
我现在的解决方案是:
def permute_tensor(inp):
x_inp, perm_ids = inp
perm_ids = tf.expand_dims(perm_ids, 1)
temp = tf.scatter_nd(perm_ids, x_inp, x_inp.shape)
return temp
def permute_batched_tensor(batched_x, batched_perm_ids):
batched_perm_x = tf.map_fn(
lambda x: permute_tensor(x), [batched_x, batched_perm_ids], dtype=tf.float32
)
return batched_perm_x`
我认为这很慢,因为它涉及一张地图。我在下面的链接中找到了一个相关的答案,我在那里发布了我的答案