gpt4 book ai didi

python - 有没有一种在 Pytorch 中创建随机位掩码的有效方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:30 24 4
gpt4 key购买 nike

我想要一个随机位掩码,它具有指定百分比的 0。我设计的功能是:

def create_mask(shape, rate):
"""
The idea is, you take a random permutations of numbers. You then mod then
mod it by the [number of entries in the bitmask] / [percent of 0s you
want]. The number of zeros will be exactly the rate of zeros need. You
can clamp the values for a bitmask.
"""
mask = torch.randperm(reduce(operator.mul, shape, 1)).float().cuda()
# Mod it by the percent to get an even dist of 0s.
mask = torch.fmod(mask, reduce(operator.mul, shape, 1) / rate)
# Anything not zero should be put to 1
mask = torch.clamp(mask, 0, 1)
return mask.view(shape)

举例说明:

>>> x = create_mask((10, 10), 10)
>>> x

1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 1 1 1
0 1 1 1 1 0 1 1 1 1
0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 0 1 1
0 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 0 1 1 1
1 1 1 1 1 1 1 1 1 1
[torch.cuda.FloatTensor of size 10x10 (GPU 0)]

此方法的主要问题是它需要 rate 来划分 shape。我想要一个接受任意小数并在位掩码中给出大约 rate 百分比的 0 的函数。此外,我正在尝试找到一种相对有效的方法。因此,我宁愿不将 numpy 数组从 CPU 移动到 GPU。是否有一种有效的方法允许十进制 rate

最佳答案

对于遇到此问题的任何人,这将直接在 GPU 上创建一个大约 80% 为零的位掩码。 (PyTorch 0.3)

torch.cuda.FloatTensor(10, 10).uniform_() > 0.8

关于python - 有没有一种在 Pytorch 中创建随机位掩码的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com