在看yolov3的keras实现时,在loss中见到这个函数,
true_box = tf.boolean_mask(y_true[l][b,...,0:4], object_mask_bool[b,...,0])
boolean_mask(a,b) 将使a (m维)矩阵仅保留与b中“True”元素同下标的部分。使用tf.boolean_mask用来过滤概率值比较低的锚盒,这个函数的一个参数b为滤波器掩模,并且当a和b的维度相同时,输出1维矩阵。
例子:
import tensorflow as tf
a = tf.constant([
[[2, 4], [4, 1]],
[[6, 8], [2, 1]]
], tf.float32)
c = a > 2
'''
c=[[[False True]
[ True False]]
[[ True True]
[False False]]]
'''
d = tf.boolean_mask(a, c)#[4. 4. 6. 8.]
with tf.Session() as sess:
print('c', sess.run(c))
print('d',sess.run(d))#[4. 4. 6. 8.]
print(d.shape)#(?,)