Булева маска Tensorflow, tf.boolean_mask - сохранить размеры исходного тензора - PullRequest
0 голосов
/ 21 мая 2018

У меня есть 1d tensor и 1d массив Booleans одинаковой длины.

Я хотел бы использовать логический массив в качестве маски для тензора, чтобы True сохранял оригиналelement-value в тензоре, а False устанавливает исходное значение элемента в тензоре на ноль.

Например,

Tensor = [1,2,3,4,5]
Array = [True, False, False, False, True]

Применить булеву маску к тензору:

Desired result = [1, 0, 0, 0, 5]
Result with tf.boolean_mask = [1, 5]

Я пытался использовать tf.boolean_mask(tensor, array), однако это уменьшает размеры результирующего тензора и включает в себя только True элементы, 2 измерения в приведенном выше примере.

Как применить булеву маску ктензор при сохранении исходных размеров тензора?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать tf.where:

tf.where(array, tensor, tf.zeros_like(tensor))
0 голосов
/ 21 мая 2018

Вы можете наложить свою логическую маску на тензор tf.int32 и использовать tf.multiply:

mask = tf.constant([True, False, False, False, True])
A = tf.range(1,6)

with tf.Session() as sess:
   res = sess.run( \
          tf.multiply(A, tf.cast(mask, tf.int32)) \
         ) # [1, 0, 0, 0, 5]
...