Setze k-größte Elemente eines Tensors in TensorFlow auf Null

8

Ich möchte k größte Elemente jeder Zeile von h finden und den Wert null für diese maximalen Elemente festlegen.

Ich könnte in der Lage sein, die Indizes des obersten Werts jeder Zeile auszuwählen, indem ich die Funktion top_k wie folgt verwende:

%Vor%

Aber ich konnte die von top_k zurückgegebenen Indizes nicht verwenden, um den Tensor zu aktualisieren.

Wie kann ich das tun? Vielen Dank im Voraus ...

    
Turkdogan Tasdelen 02.06.2016, 13:55
quelle

2 Antworten

7

Das ist ein bisschen schwierig, vielleicht gibt es eine bessere Lösung. tf.scatter_update() funktioniert hier nicht, weil es Teile des Tensors nur entlang der ersten Dimension ändern kann (z. B. kein Element in der ersten Zeile und der zweiten Spalte).

Sie müssen values und indices von tf.nn.top_k() erhalten, um einen dünnen Tensor zu erstellen und ihn vom ursprünglichen Tensor x zu subtrahieren:

%Vor%     
Olivier Moindrot 02.06.2016, 14:06
quelle
2

Ich hatte das entgegengesetzte Problem und wollte eine Operation, die Gradienten unterstützt. % Co_de% unterstützt keine Gradienten Ausbreitung und somit ein guter Weg zu implementieren wird die Funktion in C ++.

top_k c ++ Code hier .

Ihr Betrieb des Kernels wird wie folgt aussehen aussehen:

%Vor%

Meine Implementierung für ein verwandtes Problem ist hier .

    
ARB 18.01.2017 16:24
quelle

Tags und Links