2017-08-17 13 views
0

テンソルを合計してgatherまたはgather_ndを使用しても、n次元配列の最大テンソルを得ることは不可能です。n次元のテンソルの最大テンソル(要素ではない)

最大テンソルとは、最高の合計を持つ重みの集合を意味します。

私はテンソル形状(-1,4,30,256)を持ちます。ここで、256は重みです。

(-1、0、30)、(-1,130)、(-1,2,30)および(-1,3,30)のそれぞれに対して最大の重みを設定する必要があります。したがって、2次元の各テンソルの下で。

これは理想的には(-1、4、256)テンソルになります。

reduce_maxと他のmax関数は、次元自体の最大テンソル(最高の合計を持つ重みの集合)ではなく、最後の次元内の最大要素値を返します。私が試してみました:

第3次元のための適切な指標値を与える
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,2,0]]のように、合計値が最も高い重み(テンソル)の集合は[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)偉大な合計されたベクトル(最高の重みの集合)。

基本的に、map_fnは2番目から最後の軸に沿って反復するため、(120,256)のチャンクをfuncに繰り返しスライスします(1番目の軸にどれだけ多くのエントリがあるか)。次に、適切な(1,256)チャンクをチャンクで返します。チャンクは答えを示します。

関連する問題