tf.boolean_mask()

函数原型:tf.boolean_mask(tensor,mask,name='boolean_mask',axis=None)

跟numpy里面的tensor[mask]具有相同的功能。

参数:tensor是N维度的tensor,mask是K维度的,注意K小于等于N,name可选项也就是这个操作的名字,axis是一个0维度的int型tensor,表示的是从参数tensor的哪个axis开始mask,默认的情况下,axis=0表示从第一维度进行mask,因此K+axis小于等于N。

返回的是N-K+1维度的tensor,也就是mask为True的地方保存下来。

一般来说,0<dim(mask)=K<=dim(tensor),mask的大小必须匹配参数tensor的shape的前K维度。

 

 在做目标检测(YOLO)时涉及到一个函数boolean_mask(a,b) 将使a (m维)矩阵仅保留与b中“True”元素同下标的部分。使用tf.boolean_mask用来过滤概率值比较低的锚盒,这个函数的一个参数b为滤波器掩模,生成掩模要用到逻辑表达式(>或者<)生成布尔值,假设阈值threshold=C,并且当mask和tensor的维度相同时,输出1维矩阵。
代码如下:

import tensorflow as tf
import numpy as np
a=tf.constant([
    [[2,4],[4,1]],
    [[6,8],[2,1]]
],tf.float32)

b=tf.reduce_max(a,-1)
c=a>2
with tf.Session() as sess:
    print("a="+  str(sess.run(a)))
    print("b=" + str(sess.run(b)))
    print("c=" + str(sess.run(c)))
    d=tf.boolean_mask(a,c)
    print("d="+str(d.eval(session=sess)))
    print(d.shape)
    sess.close()

运行结果如下:

a=[[[2. 4.]
  [4. 1.]]

 [[6. 8.]
  [2. 1.]]]
b=[[4. 4.]
 [8. 2.]]
c=[[[False  True]
  [ True False]]

 [[ True  True]
  [False False]]]
d=[4. 4. 6. 8.]
(?,)

布尔类型张量作为滤波器掩模,过滤掉我们不想要的的值。

最后d的值为[4,4,6,8]

d.shape=(?,)

假设tensor.rank=4(m,n,p,q),mask.rank必须满足4/3/2/1
(1)当mask.shape=(m,n,p,q),结果返回(?,)
(2)当mask.shape=(m,n,p),结果返回(?,q)
(3)当mask.shape=(m,n),结果返回(?,p,q)
(4)当mask.shape=(m),结果返回(?,n,p,q)
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值