生成随机种子以播种Pytorch的最佳实践?

pgpifvop  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(138)

我真正想要的是播种数据集和数据加载器。我改编的代码来自:
https://gist.github.com/kevinzakka/d33bf8d6c7f06a9d8c76d97a7879f5cb
有人知道如何正确地播种吗?在Pytorch中播种东西的最佳实践是什么?
老实说,我不知道是否有一个算法特定的方式为GPU vs CPU。我主要关心一般pytorch,并确保我的代码是"真正随机"。特别是当它使用GPU我猜...
相关:

我的答案被删除,这里是它的内容:
我不知道这对pytorch来说是否是最好的,但这似乎是对任何编程语言来说都是最好的:
通常,在任何编程语言中,最好的随机样本都是通过操作系统生成的,在Python中,可以使用os模块:
random_data = os.urandom(4)
通过这种方式,您可以获得一个加密安全的随机字节序列,您可以将其转换为数值数据类型以用作种子。
seed = int.from_bytes(random_data, byteorder="big")
编辑:代码片段仅适用于Python 3
'''大于4,出现以下错误:
ValueError:种子必须介于0和2**32 - 1之间"""
随机尺寸= 4

nkoocmlb

nkoocmlb1#

请查看https://pytorch.org/docs/stable/notes/randomness.html
我就用这个

def seed_everything(seed=42):
  random.seed(seed)
  os.environ['PYTHONHASHSEED'] = str(seed)
  np.random.seed(seed)
  torch.manual_seed(seed)
  torch.backends.cudnn.deterministic = True
  torch.backends.cudnn.benchmark = False

最后两个参数(cudnn)用于GPU
您可以按如下方式生成种子:

def get_truly_random_seed_through_os():
    """
    Usually the best random sample you could get in any programming language is generated through the operating system. 
    In Python, you can use the os module.

    source: https://stackoverflow.com/questions/57416925/best-practices-for-generating-a-random-seeds-to-seed-pytorch/57416967#57416967
    """
    RAND_SIZE = 4
    random_data = os.urandom(
        RAND_SIZE
    )  # Return a string of size random bytes suitable for cryptographic use.
    random_seed = int.from_bytes(random_data, byteorder="big")
    return random_seed

相关问题