【发布时间】:2021-04-20 15:35:39
【问题描述】:
我想创建一个函数,对于给定的1d-张量输出掩码,在与顶部k 值相对应的位置上,其他地方有1 和0。
即,我有例如:
tensor = [1, 0, 7, 5, 2, 3] : get_largest_mask(tensor, 3) = [0, 0, 1, 1, 0, 1]
我创建了以下函数:
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'
【问题讨论】:
标签: python arrays tensorflow