之前设置过随机种子,但是网络依旧具有随机性。今天刚好看到了mmdetection的实现,才发现之前的code不是所有的随机种子都被固定下来。就算全部固定了但是尽管如此,最后的loss也不能说完全一致。参考 atomic操作,例如:浮点数相加,次序不同,结果有细微差异

def set_random_seed(seed, deterministic=False):"""Set random seed.Args:seed (int): Seed to be used.deterministic (bool): Whether to set the deterministic option forCUDNN backend, i.e., set `torch.backends.cudnn.deterministic`to True and `torch.backends.cudnn.benchmark` to False.Default: False."""random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)# 这部分我之前没有设置,所以导致了网络训练具有随机性if deterministic:torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = False

torch.backends.cudnn.benchmark = False 解释

CUDA 卷积操作使用的 cuDNN 库可能是跨应用程序多次执行的不确定性来源。当使用一组新的大小参数调用 cuDNN 卷积时,可选功能可以运行多个卷积算法,对它们进行基准测试以找到最快的一个。然后,最快的算法将在剩下的过程中一致地用于相应的大小参数集。由于基准测试噪音和不同的硬件,基准测试可能会在后续运行中选择不同的算法,即使是在同一台机器上

禁用基准测试功能 会导致 cuDNN 确定性地选择算法,可能以降低性能为代价。torch.backends.cudnn.benchmark = False
但是,如果您不需要跨应用程序的多次执行具有可重复性,那么如果使用
torch.backends.cudnn.benchmark = True

torch.backends.cudnn.deterministic = True 解释

虽然禁用 CUDA 卷积基准测试(如上所述)可确保每次运行应用程序时 CUDA 选择相同的算法,但该算法本身可能是不确定的,除非设置了 torch.use_deterministic_algorithms(True)torch.backends.cudnn.deterministic = True . 后一个设置仅控制此行为,与 torch.use_deterministic_algorithms()不同,后者将使其他 PyTorch 操作也具有确定性行为。

reference

https://pytorch.org/docs/stable/notes/randomness.html

Pytorch 随机种子的设置相关推荐

  1. python随机数种子怎么用_Python 随机种子介绍,PyTorch 中随机种子的设置应用

    随机种子是什么? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是基于生成随机数来实现的.在深度学习中,比较常用的随机方法的应 ...

  2. Python 随机种子介绍,PyTorch 中随机种子的设置与应用

    什么是随机种子? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是 基于生成随机数来实现的.在深度学习中,比较常用的随机方法的 ...

  3. python中随机种子怎么用_Python 随机种子介绍,PyTorch 中随机种子的设置应用

    随机种子是什么? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是基于生成随机数来实现的.在深度学习中,比较常用的随机方法的应 ...

  4. python怎么设置随机数种子_python实验随机种子的设置

    问题: 深度学习中,训练模型时实验参数设置但结果不同(部分论文最优结果无法复现) 实验参数包括: 数据集,train/test划分,权重初始化等 可能的原因:Dropout的存在 python.num ...

  5. python编程中,各种随机种子seed设置总结

    python随机种子seed的作用(强化学习常用到)_汀.的博客-CSDN博客先上代码import mathimport gymfrom gym import spaces, loggerfrom g ...

  6. pytorch随机种子无法复现

    随机种子设置: random.seed(1) np.random.seed(1) torch.manual_seed(1) cudnn.deterministic = True torch.cuda. ...

  7. 多线程并行中随机种子的设置问题

    今天正好Debug到多线程产生随机数,发现传统的srand(time(NULL))已经不管用了(由于线程开始的时间可能相同,导致随机数种子一样),在网上查询了一番.给出的方法无非两种: 获取更精确的时 ...

  8. Pytorch为什么总要设置随机种子

    Pytorch为什么总要设置随机种子 在pytorch中总能看到以 第一行有个设置随机种子的函数?它到底有啥作用? def set_seed(seed=1):random.seed(seed)np.r ...

  9. Pytorch坑——模型可复现性实现,随机种子设置

    最近被pytorch的模型复现搞了一波心态,每次训练结果不一样,一开始还以为自己的网络优化有效,谁知每次训练结果是不固定的,调了很久终于让模型固定了下来,在此记录下这个坑. 针对pytorch1.7. ...

最新文章

  1. 使用python愉快地做高数线代题目~
  2. 偏执却管用的 10 条 Java 编程技巧
  3. Python 无法安装PyAudio问题
  4. 一文读懂CV中的注意力机制
  5. 什么镜头最适合拍风景_35mm F1.8定焦镜头,拍人拍风景都可以!
  6. 有趣的js匿名函数写法(function嵌套)
  7. 晨哥真有料丨这样的你很掉价!
  8. 内核中的Makefile和Kconfig
  9. Java界面开发(以五子棋为例)
  10. Python生成exe可执行文件
  11. Fedora23搜狗拼音输入框无内容的bug
  12. 闪电对计算机或网络设备的威胁,计算机网络的雷电防护_计算机网络
  13. 程序员转行可以做什么?
  14. 北京农学院计算机调剂,2020北京农学院植物科学技术学院招收硕士研究生调剂...
  15. PHP+TP框架实现微信公众号开发之发送模板消息
  16. 小米手机扩容教程_手把手教你把手机16G内存升级128G 【图文教程】
  17. iOS开发——加载、滑动翻阅大量图片解决方案详解
  18. JavaCV入门指南:调用opencv原生API和JavaCV是如何封装了opencv的图像处理操作?
  19. 蒸发器分段设计matlab程序_蒸发器计算函数matlab
  20. idea 将代码块抽取为方法 快捷键

热门文章

  1. python文件命名规则-Python命名规则
  2. lxd linux系统视频教程,如何在 Linux 启动时自动启动 LXD 容器
  3. 亚马逊云科技中国峰会:Amazon DeepRacer-梦想加速度
  4. 使用summernote富文本编辑器没显示图标【已解决】
  5. LLVM笔记(2) - IR
  6. winscp连接linux网络超时问题解决
  7. java微信企业付款_Java微信支付-微信企业付款到个人
  8. 各种经纬度坐标系转换-百度坐标系、火星坐标系、国际坐标系
  9. Oracle------第十章Altering Tables
  10. 文件服务器磁盘分区管理,磁盘和文件系统管理(一) -- 磁盘分区