torch.initial_seed()

作用:

  • 每个epoch开始时,主要干两件事情:

a): 随机生成一个种子 base_seed

b): 用fork方法创建2个子进程。在每个子进程中,将 torch和 random的随机数种子设置为 base_seed + worker_id。 然后不断地查询各自的队列中有没有数据,如果有,就取出里面的 index,从 dataset中获取第 index个数据 dataset[index],将结果保存到 result_queue中。

在子进程中运行torch.initial_seed(),返回的就是 torch 当前的随机数种子,即 base_seed + worker_id。因为每个epoch开始时,主进程都会重新生成一个 base_seed,所以 base_seed是随epoch变化而变化的随机数。 此外,torch.initial_seed()返回的是 long int 类型,而Numpy只接受 uint 类型([0, 2**32 - 1]),所以需要对 2**32 取模。

  • 如果我们用 torch 或者 random 生成随机数,而不是 numpy,就不用担心会遇到这个问题,因为PyTorch已经把 torch 和 random 的随机数设置为了 base_seed + worker_id

torch.initial_seed()_第1张图片

你可能感兴趣的:(Pytorch,中的各种函数,python,深度学习,pytorch)