Я хотел бы поместить бинарный маскирующий вектор на тензор 3D в тензорном потоке - PullRequest
1 голос
/ 29 мая 2019

Я бы хотел поместить двоичный вектор маскирования на тензор 3D в тензорном потоке.

Например, shape=(None, 3,4,1)

[[1,2,3,4][5,6,7,8][9,10,11,12]]

Я хочу поставить маскирующий вектор как

[[1,1,1,1] [1,1,1,1] [1,1,0,0]]

=> мой идеальный результат -

[[1,2,3,4][5,6,7,8][9,10,0,0]]

Я пробую это следующим образом.

output = tf.layers.conv2d(output, 1, [5, 5], strides=(9, 6), padding='valid')
output = tf.tanh(output)
aa = [1.0] * 10 + [0.0] *2
aa = aa * batch_size
bb = tf.constant(aa , shape =(batch_size , 3,4,1))
output = output * bb

Я хочу поместить вектор маски позади вывода.

output = tf.layers.conv2d(output, 1, [5, 5], strides=(9, 6), padding='valid')
output = tf.tanh(output)

## output shape is (batch size , 3,4,1)
## and then mask vector [[1,1,1,1] [1,1,1,1] [1,1,0,0]] 3x4 
## (batch size , mask vector , 1)
## (batch size, 3, 4, 1)
# I want to put a mask vector behind the output.
# Include any research you've conducted

Мне нравится это

masking = tf.sequence_mask([27]*19 + [17] , maxlen=27, dtype=tf.float32)
masking2 = tf.expand_dims(masking,axis = 0)
masking2 = tf.expand_dims(masking2,axis = -1)
mask = tf.tile(masking2, [batch_size, 1 , 1,1])
G = G * mask

1 Ответ

1 голос
/ 29 мая 2019

tf.sequence_mask должен делать то, что вам нужно.

В вашем конкретном примере это будет tf.sequence_mask([4, 4, 2], maxlen=4, dtype=tf.float32).

...