Pytorch上设置随机种子

677 阅读1分钟

什么是随机种子

随机数是通过一些复杂的数学算法得到的,那么 随机种子(Random Seed)就是这些随机数的初始值。
一般计算机里面产生的随机数都是伪随机数。 伪随机数,也是就一个一直不变的数。

随机种子的一些使用特性

  1. 随机种子的取值范围?
    可以是任意数字,如10,1000

  2. 随机种子的作用范围

np.random.seed(0)
print(np.random.rand(3))
print(np.random.rand(3))
输出:
[0.5488135  0.71518937 0.60276338]
[0.54488318 0.4236548  0.64589411]

再次运行程序,会输出同一组随机数:
[0.5488135  0.71518937 0.60276338]
[0.54488318 0.4236548  0.64589411]

想要在同一个程序中产生同一组随机数,需要在下一个函数前设置一个相同的随机种子

np.random.seed(0)
print(np.random.rand(3))
np.random.seed(0)
print(np.random.rand(3))

输出
[0.5488135  0.71518937 0.60276338]
[0.5488135  0.71518937 0.60276338]
  1. 为什么需要随机种子?
    打个比方,在机器学习,深度学习算法中,我们往往会用到随机向量,随机矩阵,这使得我们每次运行算法计算出来的结果是不一致的,会为我们调试算法带来麻烦。
    基于随机种子来实现代码中的随机方法,能够 保证多次运行此段代码能够得到完全一样的结果,即保证结果的 可复现性,这样 别人跑你的代码的时候也能够很好地复现出你的结果。

  2. PyTorch 中随机种子的设置方法
    在使用 PyTorch 时,如果希望通过设置随机数种子,在 GPU 或 CPU 上固定每一次的训练结果,则需要在程序执行的开始处添加以下代码:

def setup_seed(seed):
     torch.manual_seed(seed)
     torch.cuda.manual_seed_all(seed)
     np.random.seed(seed)
     random.seed(seed)
     torch.backends.cudnn.deterministic = True
# 设置随机数种子
setup_seed(20)
# 预处理数据以及训练模型

原文链接:blog.csdn.net/m0_45866718…