当前位置: 首页 > news >正文

上线倒计时单页网站模板二维码推广赚佣金平台

上线倒计时单页网站模板,二维码推广赚佣金平台,asp网站安全,网站设计风格确认书模型的训练是一个随机过程,固定随机种子可以帮助我们复现实验结果。 接下来介绍一个模型训练过程中固定随机种子的代码,并对每条语句的作用都会进行解释。 def seed_reproducer(seed2333):random.seed(seed)os.environ["PYTHONHASHSEED"] s…

模型的训练是一个随机过程,固定随机种子可以帮助我们复现实验结果。

接下来介绍一个模型训练过程中固定随机种子的代码,并对每条语句的作用都会进行解释。

def seed_reproducer(seed=2333):random.seed(seed)os.environ["PYTHONHASHSEED"] = str(seed)np.random.seed(seed)torch.manual_seed(seed)if torch.cuda.is_available():torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = Falsetorch.backends.cudnn.enabled = True

这是一个自定义函数,函数的参数就是我们传入的种子的数值,类型为int,作用就是消除训练过程中的随机性,以确保实验得可重复性,具体使用方法为在初始化模型和dataset前调用该函数即可。

接下来逐句讲解每个语句的作用。


random.seed(seed)

  • 作用:设置python内置random模块的种子,确保所有使用random模块产生的随机数序列是确定的;
  • 应用场景:适用于任何使用random模块的地方,例如数据增强、采样等。

os.environ["PYTHONHASHSEED"] = str(seed)

  • 作用:设置python的哈希种子,python字典和其他哈希表结构依赖于哈希函数,而哈希函数的行为在不同运行之间可能会不同,通过设置PYTHONHASHSEED环境变量,可使哈希结果在同一种子下保持一致;
  • 应用场景:确保字典键值对顺序的一致性,避免因哈希碰撞引起的非确定性行为。

np.random.seed(seed)

  • 作用:设置Numpy库的随机种子;
  • 应用场景:适用于所有使用Numpy生成随机数的地方,例如初始化权重、数据打乱等。

torch.manual_seed(seed)

  • 作用:为Pytorch设置全局种子,确保所有使用Pytorch身材的随机数(包括张量操作)都是确定性的;
  • 应用场景:适用于所有使用Pytorch生成随机数的地方。

 为了方便结合代码进行理解,在这里单独把后半部分的代码复制一下。

if torch.cuda.is_available():torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = Falsetorch.backends.cudnn.enabled = True

if torch.cuda.is_available():

条件判断,只有当CUDA可用时才进行以下设置,这确保了代码可以在没有GPU的环境中正常运行。

torch.cuda.manual_seed(seed)

  • 作用:为当前GPU设置随机种子,这确保了所有在当前GPU上生成的随机数都是确定的;
  • 应用场景:适用于单个GPU的随机数生成。

torch.cuda.manual_seed_all(seed)

  • 作用:为所有可用的GPU设置相同的随机种子,这确保了在多GPU环境中,每个GPU上随机生成的随机数都是一致的;
  • 应用场景:适用于多GPU环境中的随机数生成。

torch.backends.cudnn.deterministic = True

  • 作用:确保cuDNN使用确定性的算法,某些cuDNN算法是具有随机性的,启用此选项可以提高结果的可重复性,但是可能会降低性能;
  • 应用场景:适用于需要严格可重复性的实验。

torch.backends.cudnn.benchmark = False

  • 作用:禁用cuDNN的自动选择最佳卷积算法的功能,默认情况下cuDNN会在首次运行时尝试找到最适合硬件的算法,这可能会导致结果的不确定性,禁用此选项可以确保每次都是用相同的算法;
  • 应用场景:适用于需要严格可重复性的实验。

torch.backends.cudnn.enabled = True

  • 作用:启用cuDNN,虽然设置了deterministicbenchmark参数来控制cuDNN的行为,但仍然需要确保cuDNN是启用的;
  • 应用场景:所有需要使用GPU加速pytorch计算的场景。

多卡训练的情况

对于多卡训练的情况,设置随机种子的方式需要特别注意,以确保每个进程(或者称为“rank”)生成的随机数序列是不同的,同时还需要保证整个训练过程的可重复性。基于上述要求,随机种子可使用如下代码进行修改:

seed = args.seed + utils.get_rank()
  • args.seed:我们指定的seed的数值,通常在模型训练的配置文件中,或者通过命令行参数传入模型的训练脚本;
  • utils.get_rank():这是自定义的一个函数,位于自定义库utils中,具体作用是获得当前进程的全局序号,比如在进行分布式训练时,有2台机器(我们成之为2个节点),每台机器有8张GPU,则一共会有2*8=16个进程,每个进程都会有唯一的序号,从0~15。

因此我们看到,对于分布式训练场景,随机种子只需要确定一个全局种子(args.seed)在加上一个增量(utils.get_rank()),而这个增量对于每个进程来说是固定的。

下面是get_rank()函数的具体实现:

import torch.distributed as distdef is_dist_avail_and_initialized():# 判断当前环境中是否支持分布式训练if not dist.is_available():return False# 检查当前环境是否已经成功初始化了分布式训练环境if not dist.is_initialized():return Falsereturn Truedef get_rank():# 判断分布式训练是否可用且是否已成功初始化if not is_dist_avail_and_initialized():return 0return dist.get_rank()

http://www.15wanjia.com/news/9852.html

相关文章:

  • 中山哪里有做微网站的百度推广年费多少钱
  • 网站挂马检测流程图宁波最好的seo外包
  • 菏泽市城乡建设局网站推广引流渠道有哪些
  • 绍兴 网站制作企业网络营销策划书
  • 三只松鼠网站推广策略石家庄网络推广平台
  • 韩国优秀网站设计搜易网服务内容
  • 武汉 网站建设成人教育机构排行前十名
  • 徐州建设网站价格网络营销策划书总结
  • 网站建设实训 课程标准外链管理
  • 海口建设工程信息网站网站收录工具
  • 模板做网站廊坊快速优化排名
  • 海南做网站seo营销培训
  • 手机模板网站模板点击器
  • 用vs2010做网站css学新媒体运营最好的培训学校
  • 网站系统怎么做注册一个域名需要多少钱
  • wordpress安装微信登录插件企业seo优化
  • 怎样做网页游戏网站seo薪酬水平
  • 网站后台如何修改新闻发布时间友情链接交换平台源码
  • 杭州论坛网站制作免费友情链接网站
  • 苏州公司建设网站首页seo综合查询中的具体内容有哪些
  • 用xmind做网站架构新闻投稿平台
  • 最新网站开发建设教材广州网站建设
  • 做网站付钱方式如何推广app更高效
  • 玉环 网站建设百度通用网址
  • 网站制作的流程是什么seo上海培训
  • 网站推广广告营销方案seo网站排名优化价格
  • 499可以做网站百度免费推广网站
  • 网站源码com大全网络营销优化培训
  • 东莞网站建设培训山东百度推广
  • 有没有做面粉美食的网站微信推广加人