pytorch 简单例子,pytorch随机数

  pytorch 简单例子,pytorch随机数

  原则

  在神经网络中,默认参数是随机初始化的。不同的初始化参数往往会导致不同的结果。

  如果我们得到一个好的结果,那么我们通常希望结果是可复制的,但是在pytorch中,我们可以通过设置一个全局随机数种子来达到这个目的。

  特定操作

  在随机数生成器中设置固定种子的操作分为四个部分。

  1.加速库

  cudnn对卷积运算进行了优化,牺牲了精度,换来了计算效率。

  为了确保再现性,可以使用以下设置:

  从torch.backends导入cudnn

  Cu dnn.benchmark=false #如果benchmark=true,确定性将为false

  cudnn.deterministic=True

  但是,实际上这个设置对精度没有影响。只是小数点以下位数的区别。所以如果不要求非常高的精度,计算效率会降低,不建议进行修正。

  2.PyTorch

  种子=0

  Torch.manual_seed(种子)设置CPU的随机种子

  Torch.cuda.manual_seed(种子)#设置当前GPU的随机种子

  torch . cuda . manual _ seed _ all(seed)#为所有GPU设置随机种子

  3.矩阵相乘

  如果读取数据的过程采用随机预处理(比如RandomCrop和RandomHorizontalFlip),还必须为python和numpy随机数生成器设置种子。

  导入操作系统

  随机导入

  进口编号为NP

  种子=0

  随机种子(种子).

  NP。随机种子(种子).

  OS . environ[ python hasseed ]=str(seed)#为了禁止hash的随机化,使得实验成为可能。

  4.数据加载器

  如果dataloader采用多线程(num_workers 1),最终的执行结果取决于读取数据的顺序。也就是说,改变num_workers参数也会影响实验结果。

  虽然目前还没有找到解决这个问题的方法,但是只要固定num_workers(线程数)的数量,基本上可以重复实验结果。

  不同线程的随机数种子设置主要通过DataLoader的worker_init_fn参数实现。默认情况下,线程ID用作随机数种子。如果需要自己设置,请参考下面的代码:

  GLOBAL_SEED=1

  defset_seed(种子) :

  随机种子(种子).

  NP。随机种子(种子).

  torch.manual_seed(种子)

  torch.cuda.manual_seed(种子)

  torch . cuda . manual _ seed _ all(seed)

  GLOBAL _ WORKER _ ID=无

  efWorker_init_fn(Worker_id):

  全球GLOBAL_WORKER_ID

  全局工人标识=工人标识

  set_seed(全局种子员工标识)

  dataloader=dataloader(dataset,batch_size=16,shuffle=True,num_workers=2,worker_init_fn=worker)

  涉及

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: