Python Tensorflow:使用argmax切片张量

Python Tensorflow:使用argmax切片张量,python,tensorflow,Python,Tensorflow,我有一个形状tf的张量。形状(t1)=[1,1000,400],我用形状max\u ind=tf.argmax(t1,轴=-1)获得了第三维最大值的指数。现在我有了第二个张量,它的形状与t1相同:tf.shape(t2)=[1100400] 我想使用t1中的最大索引对t2进行切片,以便输出具有以下形式 [1, 1000] 更直观的描述:产生的张量应该类似于tf的结果。reduce_max(t2,axis=-1)但是通过t1中的最大值位置,可以实现这一点,尽管这并不简单。比如说, shape =

我有一个形状
tf的张量。形状(t1)=[1,1000,400]
,我用形状
max\u ind=tf.argmax(t1,轴=-1)
获得了第三维最大值的指数。现在我有了第二个张量,它的形状与
t1
相同:
tf.shape(t2)=[1100400]

我想使用
t1
中的最大索引对
t2
进行切片,以便输出具有以下形式

[1, 1000]

更直观的描述:产生的张量应该类似于
tf的结果。reduce_max(t2,axis=-1)
但是通过
t1
中的最大值位置,可以实现这一点,尽管这并不简单。比如说,

shape = t1.shape.as_list()
xy_ind = np.stack(np.mgrid[:shape[0], :shape[1]], axis=-1)
gather_ind = tf.concat([xy_ind, max_ind[..., None]], axis=-1)
sliced_t2 = tf.gather_nd(t2, gather_ind)
另一方面,如果输入的形状在图形构建时未知,则可以使用

shape = tf.shape(t1)
xy_ind = tf.stack(tf.meshgrid(tf.range(shape[0]), tf.range(shape[1]),
                              indexing='ij'), axis=-1)

其余部分同上。

谢谢!您使用np.mgrid而不是tf.meshgrid有什么具体原因吗?这不会影响GPU的性能吗?不会,
np.array
将只传递一次到图形,并作为常量存储在图形中。如果在图形构造过程中张量的大小未知,请使用
tf.meshgrid
。如果有人想知道,使用纯tf,它的工作原理如下:
xy_ind=tf.transpose(tf.meshgrid(tf.range(tf.shape(t1)[0]),tf.range(tf.shape(t1)[1]),[2,1,0])
这实际上不起作用,因为
tf.meshgrid
输出的形状与
np.mgrid
不同,因此如果我没有误解,您仍然需要进行转置。我刚刚意识到
meshgrid
与numpy中一样有一个
索引
参数。将使用该参数。