2017-08-17 43 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)塊,瞧,給出答案。