tf.boolean_mask(2D,2D)给出1D结果



问题

tf.boolian_mask((看起来相对简单:它从张量中删除与条件不匹配的值。如果掩码的维度与目标张量相同,则条件按元素工作。

使用ret = tf.boolean_mask(src, mask),我发现输出维度与输入维度不匹配。

src:    Tensor("mul_3:0", shape=(?,?), dtype=int32)
mask:   Tensor("Cast_1:0", shape=(?,?), dtype=int32)
ret:    Tensor("boolean_mask/Gather:0", shape=(?,), dtype=int32)

请注意,(?,)的作用与(?,?)不同,尽管我不确定为什么或如何。


代码

src = [1, 2, 3, 4, 5, 6, 7, 8, 9]
src = tf.ones([tf.shape(src)[0], 1], tf.int32) * src
matrix = tf.ones_like(src, tf.int32)
matrix = tf.matrix_band_part(matrix, 3, 3) # number for mask is arbitrary
mask = tf.cast(matrix, tf.bool)
ret = tf.boolean_mask(tensor=src, mask=mask)

出了什么问题

请参阅文档中的返回部分:

(N-K+1(维张量由张量中的条目填充对应于掩码中的True值。

其中Nsrc的维度,Kmask的维度,当N=K时,返回总是1D,这就是您的情况。

最新更新