我真正想要的是为数据集和数据加载器提供种子。我正在调整以下代码:
https://gist.github.com/kevinzakka/d33bf8d6c7f06a9d8c76d97a7879f5cb
有人知道如何正确地进行种子吗?在Pytorch中播种的最佳实践是什么。
老实说,我不知道是否有针对GPU和CPU的算法特定方式。我主要关心通用的pytorch,并确保我的代码是“真正随机”的。特别是当它使用GPU时,我猜想...
相关:
- https://discuss.pytorch.org/t/best-practices-for-seeding-random-numbers-on-gpu/18751
- https://discuss.pytorch.org/t/the-random-seed/19516/4
- https://discuss.pytorch.org/t/best-practices-for-generating-a-random-seed-to-seed-pytorch/52894/2
我的回答被删除了,以下是它的内容:
我不知道这是否适用于pytorch,但这似乎适用于任何编程语言:
通常在任何编程语言中,最好的随机样本是通过操作系统生成的。在Python中,您可以使用os模块:
random_data = os.urandom(4)
这样,您就可以获得一个密码安全的随机字节序列,您可以将其转换为数字数据类型以用作种子。
seed = int.from_bytes(random_data, byteorder="big")
编辑:代码片段仅适用于Python 3。
当大于4时,我会收到以下错误:
ValueError: 种子必须在0和2**32 - 1之间
RAND_SIZE = 4