首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在tensorflow中创建顶级“k”元素掩码的更有效方法

在tensorflow中创建顶级“k”元素掩码的更有效方法
EN

Stack Overflow用户
提问于 2021-04-20 23:35:40
回答 1查看 134关注 0票数 1

我想创建一个函数,对于给定的1d,-tensor输出掩码,在位置上,对应于最上面的k值,在其他地方有10。也就是说,举例来说,我有:

代码语言:javascript
复制
tensor = [1, 0, 7, 5, 2, 3] : get_largest_mask(tensor, 3) = [0, 0, 1, 1, 0, 1]

我创建了以下函数:

代码语言:javascript
复制
def get_largest_mask(tensor, n_to_keep):
    # tensor 1-d tensor
    values, indices = tf.math.top_k(tensor, k=n_to_keep)

    mask = tf.zeros(tf.size(tensor))
    mask = tf.tensor_scatter_nd_update(mask, [[idx] for idx in indices], tf.ones(n_to_keep))

    return mask

然而,对于感兴趣的情况,它的工作速度相当慢,正如我测量的那样,大多数时间都是由tf.tensor_scatter_nd_update主导的。更快的替代方案是什么?

张量的典型大小是10^3-10^4元素,k的量级是‘10^2-10^3’。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 23:59:13

我会找出最大的K值,然后进行大小比较

代码语言:javascript
复制
import tensorflow as tf

tensor = tf.convert_to_tensor([1, 0, 7, 5, 2, 3])

mask = tf.cast(tensor >= tf.math.top_k(tensor, 3)[0][-1], tf.int32)
# mask = <tf.Tensor: shape=(6,), dtype=int32, numpy=array([0, 0, 1, 1, 0, 1], dtype=int32)>

解释

tf.math.top_k返回两个值,第一个是包含实际前k个值的张量,第二个是索引。我们获取这些值,然后访问最小值的[-1]。然后,我们通过询问>=问题来创建掩码。最后,我们将根据您请求的输出强制转换为整数

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67182034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档