2017-08-17 94 views
0

我发现即使通过求和张量并使用gather或gather_nd,也无法获得n维数组中的最大张量。n维张量中的最大张量(不是元素)

最大张量我是指总和最高的权重集合。

我有一个形状的张量(-1,4,30,256),其中256是权重。我需要为每个(-1,0,30),(-1,1,30),(-1,2,30)和(-1,3,30)获得最大权重集合, ,所以在第二维的每张张量下。

这将理想地导致(-1,4,256)张量。

reduce_max和任何其他最大函数将只返回最后一个维度内的最大元素值,而不是维度本身中的最大张量(这是具有最高总和的权重集合)。我曾尝试:

p1 = tf.reduce_sum(tensor, axis=3) # (-1, 4, 30) 
p2 = tf.argmax(p1, 2) # (-1, 4) 

这给适当的索引值的第三维:

[[0, 2, 2, 0], 
[0, 1, 3, 0], 
... 

但运行上述tf.gather或tf.gather_nd不工作,我的拆分数据,即使事先和使用不同的轴。

而且,我可以得到拨款指标,如果我的手用gather_nd,如:

tf.gather_nd(out5, [[0,0,0], [0,1,2], [0,2,2], [0,3,0], [1,0,0], [1,1,2], [1,2,2], [1,3,1]]) 

但是,当我们使用的是未知的第一个维度的变量tensorflow,我不能建立这些索引。

我已经通过搜索相关的解决方法,发现没有适用。

谁能告诉我如何做到这一点?谢谢!

编辑澄清:

权重最大的张量将是具有最高总和的权重集:

[[ 1, 2, 3], [0, 0, 2], [1, 0, 2]] would be [1, 2, 3] 
+0

你是什么意思最大张量?你的意思是张量是最大单张张量,还是最大张量张量,还是别的? – ml4294

+0

具有最高求和值的权重(张量)的集合,例如权重[[1,2,3],[0,1,2],[2,0,2]]将是[1,2,3 ] –

回答

0

我想通了使用map_fn:

我重塑了我的张量到(-1,120,256)

tfr = tf.reshape(sometensor, ((-1, 120, 256))) 
def func(slice): 
    f1 = tf.reduce_sum(slice, axis=1) 
    f2 = tf.argmax(f1) 
    return(slice[f2]) 
bla = tf.map_fn(func, tfr) 

其中返回(-1,256)与greateted总和矢量(最高权重集)。

基本上,map_fn会沿着从第2轴到最后一个轴的方向进行迭代,所以它会将(120,256)块重复切换到func(第一个轴上的条目是多少)。然后它返回大块合适的(1,256)块,瞧,给出答案。