首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >torch.topk的时间复杂度

torch.topk的时间复杂度
EN

Stack Overflow用户
提问于 2021-01-05 14:14:55
回答 1查看 294关注 0票数 1

当n.topk(m)的m和n分别超过2千万和200,000时,排序变得非常慢(超过3小时)。我想知道torch.topk的时间复杂度和排序的改进措施。

代码语言:javascript
复制
topv, topi = outline.topk(beam_size)  # beam_size = 200,000, outline: 1 × 20,000,000
EN

回答 1

Stack Overflow用户

发布于 2021-01-05 15:13:24

我不知道pytorch是如何为CPU张量实现topk的。但是,由于您使用的是CPU,因此可以使用numpy arrays的现有部分排序实现。

例如,使用bottleneck.argpartition

代码语言:javascript
复制
import bottleneck
with torch.no_grad():
  topi = bottleneck.argpartition(outline.numpy(), kth=beam_size)
topv = outline[topi]  # allow gradients to propagate through indexing

请注意,bottleneck.argpartition的有效实现不会对数组进行排序,因此可以保证topv确实大于数组的所有其他元素,但是topv中的值不会排序,对于某些i,可能会出现topv[i] < topv[i+1]的情况。

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

https://stackoverflow.com/questions/65574016

复制
相关文章

相似问题

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