用 Pytorch 随机选择?

新手上路,请多包涵

我有一张图片张量,想从中随机选择。我正在寻找 np.random.choice() 的等价物。

 import torch

pictures = torch.randint(0, 256, (1000, 28, 28, 3))

假设我想要其中的 10 张图片。

原文由 Nicolas Gervais 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.7k
2 个回答

torch 没有 np.random.choice() 的等效实现,请参阅 此处 的讨论。另一种方法是使用打乱的索引或随机整数进行索引。

替换来做到这一点:

  1. 生成 n 个 随机索引
  2. 使用这些索引索引您的原始张量
pictures[torch.randint(len(pictures), (10,))]

无需 更换即可做到:

  1. 打乱索引
  2. 取前 n 个元素
indices = torch.randperm(len(pictures))[:10]

pictures[indices]

阅读有关 torch.randinttorch.randperm 的更多信息。第二个代码片段的灵感来自 PyTorch 论坛中的这篇 帖子

原文由 Nicolas Gervais 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于这种大小的张量:

 N, D = 386363948, 2
k = 190973
values = torch.randn(N, D)

下面的代码工作得相当快。大约需要 0.2 秒:

 indices = torch.tensor(random.sample(range(N), k))
indices = torch.tensor(indices)
sampled_values = values[indices]

然而,使用 torch.randperm 将花费超过 20 秒:

 sampled_values = values[torch.randperm(N)[:k]]

原文由 Stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题