Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tensorflow中,有没有一种方法可以使用散射来排列成批的张量,而不必拆下张量?_Python_Tensorflow_Keras_Neural Network_Tensor - Fatal编程技术网

Python 在Tensorflow中,有没有一种方法可以使用散射来排列成批的张量,而不必拆下张量?

Python 在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

例如,假设我的输入张量的维数为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无法实现这一点,因为如果使用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`

我认为这很慢,因为它涉及一张地图。

我在下面的链接中找到了一个相关的答案,我在那里发布了我的答案