2017-10-02 2 views
0

Angenommen, ich habe diese beiden Tensoren:Keras Tensoren - Get Werte mit den Indizes von einem anderen Tensor kommenden

  • valueMatrix, geformt wie (?, 3), wo ? ist die Losgröße
  • indexMatrix, geformt wie (?, 1)

Ich möchte Werte von valueMatrix bei den Indizes abrufen, die in indexMatrix enthalten sind.

Beispiel (Pseudo-Code):

valueMatrix = [[7,15,5],[4,6,8]] -- shape=(2,3) -- type=float 
indexMatrix = [[1],[0]] -- shape = (2,1) -- type=int 

ich aus diesem Beispiel wollen so etwas wie:

valueMatrix[indexMatrix] --> returns --> [[15],[4]] 

Ich ziehe Tensorflow über andere Backends, aber die Antwort muss kompatibel sein ein Keras-Modell, das Lambda-Schichten oder andere geeignete Schichten für die Aufgabe verwendet.

Antwort

1
import tensorflow as tf 
valueMatrix = tf.constant([[7,15,5],[4,6,8]]) 
indexMatrix = tf.constant([[1],[0]]) 

# create the row index with tf.range 
row_idx = tf.reshape(tf.range(indexMatrix.shape[0]), (-1,1)) 
# stack with column index 
idx = tf.stack([row_idx, indexMatrix], axis=-1) 
# extract the elements with gather_nd 
values = tf.gather_nd(valueMatrix, idx) 

with tf.Session() as sess: 
    print(sess.run(values)) 
#[[15] 
# [ 4]] 
+0

Großartig! Danke - Ich konnte keinen Keras-Ersatz für 'tf.gather_nd' finden, aber es funktioniert trotzdem innerhalb einer Lambda-Ebene. –

Verwandte Themen