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

  1. 获取更精确的时间单位(time(NULL)获取的是秒为单位的时间),如毫秒ms,或者微秒us
  2. 使用线程ID作为随机数种子

经过测试发现:

  1. 随机数种子声明的位置会影响随机数的结果,这里的位置,主要是指线程内/外。具体见图一,图二
  2. 仅用线程ID仍然无法避免产生相同随机数的可能(原因我还没想明白,不知道各位大佬有懂的没),具体见图二
图一:使用线程ID在线程外声明随机数种子(高亮与最后一排)
图二:使用线程ID在线程内声明随机数种子(倒数第二、四排)

按照网上的说法,随机数种子肯定是应该声明在线程内的,这一点我是认同的,为了解决单纯使用ID仍然存在的随机数相同的问题,我决定采用微秒级别的时间+线程ID作为随机数种子(毫秒级别的时间经过测试仍然有可能相同),测试结果如图

附:随机数种子生成部分的代码

DWORD id = GetCurrentThreadId();
LARGE_INTEGER nFreq, t1;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&t1);
double dt = (double)t1.QuadPart / (double)nFreq.QuadPart * 1000000;
srand(id+dt);

以上,欢迎大佬指正。

多线程并行中随机种子的设置问题相关推荐

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

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

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

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

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

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

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

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

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

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

  6. python中随机种子_Pytorch随机种子

    最近在做比赛的时候,遇到了一个最好结果,但是之后无论怎样都复现不出来最好结果了.猜测是不是跟Pytorch中的随机种子有关. 训练过程 在训练过程中,若相同的数据数据集,相同的训练集.测试集划分方式, ...

  7. Pytorch 随机种子的设置

    之前设置过随机种子,但是网络依旧具有随机性.今天刚好看到了mmdetection的实现,才发现之前的code不是所有的随机种子都被固定下来.就算全部固定了但是尽管如此,最后的loss也不能说完全一致. ...

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

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

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

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

最新文章

  1. ORACLE 日期比较
  2. Swift URL含有中文的处理
  3. [ATF]-ATF的异常向量表介绍-(irq,fiq,smc,hyc...)
  4. sshpass做秘钥分发,ansible做自动化运维工具
  5. 量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...
  6. vue lang_新疆人的“lang”是“浪”吗?
  7. 程序的装入和链接过程
  8. 线程池异步线程中再次获取线程池资源的问题
  9. 为什么C++编译器不能支持对模板的分离式编译
  10. 自定义一个ImageSwitcher
  11. 用C语言实现猜单词的小游戏
  12. JQuery 获取URL中传递的参数
  13. vlan理论03-vlan映射
  14. aiml简介+源代码解析+中文分词(java)
  15. 世界需要简化第四篇:从地面发射人造卫星或战术导弹,如何控制其运行轨道?——算法经高度抽象简化,所有下标经仔细核对
  16. tplink软件升级有用吗_tplink路由器固件更新的方法
  17. xp计算机u盘重装系统,如何用u盘装xp系统_纯净版xp系统_xp系统安装教程 - u大师...
  18. CIO:人工智能将改变企业IT
  19. 为什么你的孩子拼命做题,成绩还总是上不去?
  20. 从零开始操作系统------探析保护模式

热门文章

  1. 中小企业智能化进销存管理模式
  2. Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路
  3. mbrfix修复拒绝访问_拒绝错误修复的一些正确原因
  4. 2021ICPC西安邀请赛赛后总结
  5. android 名片识别 简书,简书,也有了我的名片
  6. zadig对于java的支持
  7. 蚂蚁分类信息系统mymps对接阿里云短信接口
  8. 树莓派PICO入门:电脑连接简易树莓派PICO单片机,烧录,使用python进行简单代码操作。
  9. 【解决】ubuntu用vim编辑时退格键和上下左右键失灵的问题
  10. html中bak是什么文件怎么打开,bak文件怎么打开?小编教你bak文件打开方法