2016-11-25 4 views
1

Kann jemand die oberen n größten Werte pro Reihe eines Rang 2 Tensors extrahieren?Tensorflow top n Werte im Tensor

Zum Beispiel, wenn ich die Spitze 2 Werte eines Tensors der Form [2,4] mit Werten gesucht:

[[40, 30, 20, 10], [10, 20, 30, 40 ]]

die Matrix gewünschten Zustand aussehen würde: [[Es stimmt, True, false, false], [false false, True, True]]

Sobald ich die Bedingung Matrix haben, kann ich Wählen Sie, um die tatsächlichen Werte zu wählen.

Vielen Dank für Ihre Unterstützung!

Antwort

6

Sie können es tun integrierte sich mit der tf.nn.top_k Funktion:

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) 

boolean True/False Werte zu erhalten, können Sie zunächst den k-Wert erhalten und verwenden Sie dann 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

Danke für die Hilfe. Gibt es eine einfache Möglichkeit, diese top_k-Werte zu verwenden, um einen Tensor der ursprünglichen Größe mit True- und False-Werten zu erhalten? –

+0

Ja, siehe bearbeitete Antwort. – sygi

+1

Danke! Meintest Du tf.greater_equal (a, kth)? –

Verwandte Themen