Хитрость заключается в том, чтобы сначала преобразовать ваш набор индексов в логическую маску, которую затем можно использовать для уменьшения my_tensor
, как вы описали, используя операцию boolean_mask .
Вы можетеВыполните это с помощью однократного кодирования idx
тензора.
Итак, где idx = [2, 0, 4]
мы можем сделать tf.one_hot(idx, seq_length)
, чтобы преобразовать его во что-то вроде этого:
[ [0., 0., 1., 0., 0.],
[1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1.] ]
Затем, сложив все вместе, скажем my_tensor
:
[ [0.6413697 , 0.4079175 , 0.42499018, 0.3037368 , 0.8580252 ],
[0.8698617 , 0.29096508, 0.11531639, 0.25421357, 0.5844104 ],
[0.6442119 , 0.31816053, 0.6245482 , 0.7249261 , 0.7595779 ] ]
мы можем действовать следующим образом:
result = tf.boolean_mask(my_tensor, tf.one_hot(idx,seq_length))
, чтобы получить:
[0.42499018, 0.8698617 , 0.7595779 ]
, как ожидается