在Tensorflow中使用2D占位符遮罩3D占位符张量

时间:2018-09-20 22:07:21

标签: python tensorflow deep-learning tensor

我有一个占位符,其动态大小为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 :(得分:1)

怎么样

with_positions_offsets

可打印

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))