2016-11-25 15 views
1

ランク2のテンソルの行ごとに上位n個の最大値を抽出する方法を知っている人はいますか?Tensorflowのトップnテンソルの値

[40、30、20、10]、[10、20、30、40:私は値を持つ形状のテンソルの上部2値[2,4]たい場合例えば

、 ]]

希望条件行列は次のようになります。 [[、真真、偽、偽]、[FALSE、FALSE、TRUE、TRUE]]

私は状態行列を作成したら、私が使用することができます実際の値を選択するにはtf.selectを使用します。

ありがとうございます!

答えて

6

あなたは組み込みのtf.nn.top_k機能使用してそれを行うことができます:ブールTrue/False値を取得するには

a = tf.convert_to_tensor([[40, 30, 20, 10], [10, 20, 30, 40]]) 
b = tf.nn.top_k(a, 2) 

print(sess.run(b)) 
TopKV2(values=array([[40, 30], 
    [40, 30]], dtype=int32), indices=array([[0, 1], 
    [3, 2]], dtype=int32)) 

print(sess.run(b).values)) 
array([[40, 30], 
     [40, 30]], dtype=int32) 

を、あなたは最初のk番目の値を取得し、tf.greater_equalを使用することができます。

kth = tf.reduce_min(b.values) 
top2 = tf.greater_equal(a, kth) 
print(sess.run(top2)) 
array([[ True, True, False, False], 
     [False, False, True, True]], dtype=bool) 
+0

ありがとうございました助けを求めてこれらのtop_k値を使用してTrueおよびFalse値で元のサイズのテンソルを取得する簡単な方法はありますか? –

+0

はい、編集済みの回答をご覧ください。 – sygi

+1

ありがとう!あなたはtf.greater_equal(a、kth)を意味しましたか? –

関連する問題