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

时间:2018-07-30 02:43:59

标签: python python-3.x tensorflow mask tensor

问题

tf.boolean_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)

出了什么问题?

1 个答案:

答案 0 :(得分:2)

请参见Returns section in the docs

  由张量中的项填充的

(N-K + 1)维张量   对应于遮罩中的True值。

其中Nsrc的尺寸,而Kmask的尺寸,当N=K时,返回值始终为1D,即情况。