2016-07-19 6 views
1

Ich habe mehrere Tensoren:Wie kann ich bestimmte Reihen eines Tensors in TensorFlow bekommen?

logits: Dieser Tensor enthält die endgültigen Vorhersagewerte.

tf.Tensor 'MemN2N_1/MatMul_3:0' shape=(?, 18230) dtype=float32 

Die endgültige Vorhersage berechnet als predicted_op = tf.argmax (Logits, 1, name = "predict_op")

Jetzt möchte ich die Vorhersage in einige bestimmte Spalten beschränken. Die folgenden zwei Tensoren enthalten Spaltenindizes, aus denen ich wählen möchte.

self._stories ist vom Typ

tf.Tensor 'stories:0' shape=(?, 12, 110) dtype=int32 

self._queries vom Typ

tf.Tensor 'queries:0' shape=(?, 110) dtype=int32 

Hier werden die 110 Spalten die Indexnummern Ich möchte sind Logits in beschränken. Zum Beispiel, wenn logits = [[10,20,30,40,50], [10,20,30,40,50] ..] und self._stories = [[[1,4, ...], [1,2,4, ...], ...], [[0,4, ...], [2,4 ...], ...] ...] und self._queries = [[1,4 ...], [2,4, ...], ...] dann sollten logits aussehen wie [[20,30,50], [10,30,50] ...]

Wie kann ich diese Art der Indexfilterung in Tensorflow tun?

Antwort

0

Haben Sie tf.equal getestet? Dies vergleicht zwei Tensoren und erzeugt einen neuen Tensor, der True enthält, wo er gleich ist, und False, wo er nicht gleich ist.

Mit diesem Bool-Tensor füttern Sie tf.select, die von einem Tensor oder einem anderen, elementweise, abhängig von dem Bool-Wert, den Sie im ersten Schritt erstellt haben.

Ich habe nicht tief in die speziellen Formen hineingeschaut, die Sie zur Verfügung gestellt haben, aber mit diesen beiden Ops können Sie die Art von Flow erzeugen, nach der Sie verlangen.

0

Versuchen Sie tf.gather.

row_indices = [1] 
row = tf.gather(tf.constant([[1, 2],[3, 4]]), row_indices) 
tf.Session().run(row) # returns [[3, 4]] 

Sie können die führende Dimension der Größe 1 mit tf.squeeze entfernen:

row = tf.squeeze(row, squeeze_dims=0) 
Verwandte Themen