炼丹踩坑合集(持续更新)

目录

关于随机种子

什么是随机种子&设置随机种子的作用 (2023/04/11)

1.不设置随机种子

2.设置随机种子的方式不对

关于随机种子

什么是随机种子&设置随机种子的作用 (2023/04/11)

我的理解:

  • 简略版:随机种子就是一个数,固定这个数值可以让随机数生成器产生的初始化随机数是相同的。
  • 复杂版:我们在训练网络时,网络里面定义的权重参数会先初始化为一个随机数,然后再经过训练不断更新。一个很大的问题是,权重参数的初始值会在一定程度上影响模型最后的收敛结果,因此使用不同的初始化参数,最后得到的结果差别可能会较大。但固定权重参数的初始值可以很大程度上使实验结果可以复现,而设置随机种子的目的就是让权重参数能初始化为同一个数。

    注:这里使用“很大程度”是因为固定权重参数初始值并不能保证实验结果就一定可以复现。其他因素,如:服务器的不同,也可能导致结果不同。(但以我目前少许的经验来看,固定权重参数的初始值可以解决我大部分的实验结果可复现性问题)

官方版:

随机种子

深度学习笔记:随机种子的作用

1.不设置随机种子

不设置随机种子对很多模型来讲实验结果是真的无法复现。我最开始接触深度学习的时候根本不知道随机种子,当时的模型比较稳健,随机数对结果的影响较小,每次跑出的结果差别不大,所以我很长时间没有意识到这个问题。直到我遇到了不那么稳健的模型(我自己搭的)……

2.设置随机种子的方式不对

当我意识到随机种子的必要性时,我就在自己的模型中设置了随机种子。以下是相关代码

# packages need to be imported
import random
import numpy as np
import torch


# define setting function
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


# set random seed
setup_seed(3407) # the number 3407 can be any other value you like

以上的代码应该可以涵盖到所有需要生成随机数的地方。但是,把放它错位置仍然会导致你模型中的初始化随机数没有固定。

踩坑场景再现:setup_seed()放在训练文件的主函数开头

分析:setup_seed()的作用域在添加这个函数的后面,而我的网络模型是在开头import packages时就已经引入了,因此setup_seed()函数根本作用不到我的模型,即我的模型中的初始化随机数并没有被固定。

解决方式:直接将函数放在导入模型(准确来说是涉及到生成随机数的代码)前面。我的操作方式如下图


 若有不妥之处,望不吝赐教:D

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值