Маскировка трехмерного тензора заполнителя с помощью 2D заполнителя в Tensorflow - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть заполнитель с динамическим размером A (размер пакета, размер последовательности, 5) и другой заполнитель с нулевым и одним значением и динамическим размером B (размер партии, размер последовательности).Я хочу использовать второй 2D-заполнитель для маскировки первых заполнителей, как если бы значение тензора B [0] [0] = 0, тогда A [0] [0] [0: 5] будет установлено в ноль, и если оно былоравно B [0] [0] = 1, тогда A [0] [0] [0: 5] не изменится.

palceholder A:(shape=(2,2,5))    
   [[[ 1,  2,  3,  1,  4],
    [ 2,  3,  5,  2,  4]],
   [[ 2,  7,  5,  8,  1],
    [ 4,  5,  1,  3,  9]]] 

palceholder B:(shape=(2,2))
  [[ 1,  0],
   [ 0,  1]]

Tensor C= Mask(A,B)    
   [[[ 1,  2,  3,  1,  4],
    [ 0,  0,  0,  0,  0]],
   [[ 0,  0,  0,  0,  0],
    [ 4,  5,  1,  3,  9]]]

Я пробовал tf.boolean_mask, но он не работаетдля масок динамического размера.

1 Ответ

0 голосов
/ 21 сентября 2018

Как насчет

import numpy as np
import tensorflow as tf

a = tf.placeholder(tf.int32, [None, None, 5])
b = tf.placeholder(tf.int32, [None, None])
c = tf.multiply(a, tf.expand_dims(b, -1))

with tf.Session() as sess:
    in_a = np.reshape(np.arange(20, dtype=np.int32), [2, 2, 5])
    in_b = np.eye(2)
    print("A: {}".format(in_a))
    print("B: {}".format(in_b))
    out_c = sess.run(c, feed_dict={a: in_a, b: in_b})
    print("C: {}".format(out_c))

, который печатает

A: [[[ 0  1  2  3  4]
  [ 5  6  7  8  9]]

 [[10 11 12 13 14]
  [15 16 17 18 19]]]
B: [[1. 0.]
 [0. 1.]]
C: [[[ 0  1  2  3  4]
  [ 0  0  0  0  0]]

 [[ 0  0  0  0  0]
  [15 16 17 18 19]]]
...