权重初始化--随机种子的确定

为什么单独把这一段拎出来呢?因为不设置的话,由于随机种子,复现或重跑模型产生的结果不一致,经过数礼拜的超参数优化=白做。

你问我为什么会知道?我觉得应该是有人托梦给我。or2


seed在深度学习代码中叫随机种子,设置seed的目的是由于深度学习网络模型中初始的权值参数通常都是初始化成随机数,而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感,设置了seed就相当于规定了初始的随机值。

即产生随机种子意味着每次运行实验,产生的随机数都是相同的

为将模型在初始化过程中所用到的“随机数”全部固定下来,以保证每次重新训练模型需要初始化模型参数的时候能够得到相同的初始化参数,从而达到稳定复现训练结果的目的。【血泪教训】

  1. torch.manual_seed(seed):设置生成随机数的种子【You can use torch.manual_seed() to seed the RNG for all devices (both CPU and CUDA)】

  2. torch.cuda.manual_seed_all():为所有的GPU设置种子【使用多个GPU】

  3. torch.cuda.manual_seed(seed):在GPU中设置生成随机数的种子【当设置的种子固定下来的时候,之后依次pytorch生成的随机数序列也被固定下来,当只调用torch.cuda.manual_seed()一次时并不能生成相同的随机数序列,要得到相同的随机数序列就需要每次产生随机数的时候都要调用torch.cuda.manual_seed()】

  4. dgl.random.seed(seed):在DGL中设置随机方法的种子

  5. random.seed(seed):改变随机生成器的种子,传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;如果不设置值,每次生成的随机数会不同

 random_seed = 1388
   random.seed(random_seed)
   np.random.seed(random_seed)
   torch.manual_seed(random_seed)
   torch.cuda.manual_seed_all(random_seed)
   #cudnn.benchmark = True       
   torch.backends.cudnn.deterministic = True
   torch.backends.cudnn.benchmark = False

参考:深度学习中的随机初始化种子random.seed()与参数初始化_random.seed(seed)-CSDN博客

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值