问题
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)
出了什么问题?
答案 0 :(得分:2)
请参见Returns section in the docs:
由张量中的项填充的(N-K + 1)维张量 对应于遮罩中的True值。
其中N
是src
的尺寸,而K
是mask
的尺寸,当N=K
时,返回值始终为1D,即情况。