2017-11-27 4 views
1

Ich habe einen Tensor xi der Form (?, 20, 10) und einen anderen Tensor y_data der Form (?, 20, 1). Ich möchte den y_data Tensor verwenden, um den xi Tensor zu "indexieren", um etwas wie tf.exp(xi[y_data] - tf.log(tf.reduce_sum(xi, axis=2)) zu tun.Indizierung Tensor mit einem anderen Tensor

z. tf.exp(xi[:, :, 4] - tf.log(tf.reduce_sum(xi, axis=2))) ergibt einen Tensor der Form (?, 20). Ich möchte nur den Index, hier 4, aus einem anderen Tensor herausholen.

Vielen Dank im Voraus!

Antwort

1
In diesem Fall

, würde ich eine Schleife über die möglichen Werte für y_data verwenden, die ich gehe davon von 0 bis 9.

result = tf.zeros(tf.shape(y_data), tf.float32) 
for i in range(10): 
    result = tf.where(tf.equal(y_data, i), tf.exp(xi[:, :, i:i+1]), result) 
result = tf.reshape(result, [-1, 20]) 
result -= tf.log(tf.reduce_sum(xi, axis=2)) 

Wahrscheinlich nicht die effizienteste gehen, aber das ist die einzige Art, wie ich denken konnte, .

+0

Vielen Dank, Ihre Antwort ließ mich über einen anderen Weg nachdenken, um es zu lösen. Ich konnte "y_data" als einen heißen Tensor der Form "(?, 20, 10)" erhalten. Auf diese Weise könnte die Indexierung durch Multiplikation und Reduktion erfolgen: 'tf.reduce_sum (xi * y_data, axis = 2)'. – user1305241

Verwandte Themen