我有一个占位符,其动态大小为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,但不适用于动态尺寸蒙版。
答案 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))