多线程并行中随机种子的设置问题
今天正好Debug到多线程产生随机数,发现传统的srand(time(NULL))已经不管用了(由于线程开始的时间可能相同,导致随机数种子一样),在网上查询了一番。给出的方法无非两种:
- 获取更精确的时间单位(time(NULL)获取的是秒为单位的时间),如毫秒ms,或者微秒us
- 使用线程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);
以上,欢迎大佬指正。
多线程并行中随机种子的设置问题相关推荐
- python随机数种子怎么用_Python 随机种子介绍,PyTorch 中随机种子的设置应用
随机种子是什么? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是基于生成随机数来实现的.在深度学习中,比较常用的随机方法的应 ...
- Python 随机种子介绍,PyTorch 中随机种子的设置与应用
什么是随机种子? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是 基于生成随机数来实现的.在深度学习中,比较常用的随机方法的 ...
- python中随机种子怎么用_Python 随机种子介绍,PyTorch 中随机种子的设置应用
随机种子是什么? 随机种子是针对 随机方法 而言的. 随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是基于生成随机数来实现的.在深度学习中,比较常用的随机方法的应 ...
- python编程中,各种随机种子seed设置总结
python随机种子seed的作用(强化学习常用到)_汀.的博客-CSDN博客先上代码import mathimport gymfrom gym import spaces, loggerfrom g ...
- python怎么设置随机数种子_python实验随机种子的设置
问题: 深度学习中,训练模型时实验参数设置但结果不同(部分论文最优结果无法复现) 实验参数包括: 数据集,train/test划分,权重初始化等 可能的原因:Dropout的存在 python.num ...
- python中随机种子_Pytorch随机种子
最近在做比赛的时候,遇到了一个最好结果,但是之后无论怎样都复现不出来最好结果了.猜测是不是跟Pytorch中的随机种子有关. 训练过程 在训练过程中,若相同的数据数据集,相同的训练集.测试集划分方式, ...
- Pytorch 随机种子的设置
之前设置过随机种子,但是网络依旧具有随机性.今天刚好看到了mmdetection的实现,才发现之前的code不是所有的随机种子都被固定下来.就算全部固定了但是尽管如此,最后的loss也不能说完全一致. ...
- Pytorch为什么总要设置随机种子
Pytorch为什么总要设置随机种子 在pytorch中总能看到以 第一行有个设置随机种子的函数?它到底有啥作用? def set_seed(seed=1):random.seed(seed)np.r ...
- Pytorch坑——模型可复现性实现,随机种子设置
最近被pytorch的模型复现搞了一波心态,每次训练结果不一样,一开始还以为自己的网络优化有效,谁知每次训练结果是不固定的,调了很久终于让模型固定了下来,在此记录下这个坑. 针对pytorch1.7. ...
最新文章
- ORACLE 日期比较
- Swift URL含有中文的处理
- [ATF]-ATF的异常向量表介绍-(irq,fiq,smc,hyc...)
- sshpass做秘钥分发,ansible做自动化运维工具
- 量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...
- vue lang_新疆人的“lang”是“浪”吗?
- 程序的装入和链接过程
- 线程池异步线程中再次获取线程池资源的问题
- 为什么C++编译器不能支持对模板的分离式编译
- 自定义一个ImageSwitcher
- 用C语言实现猜单词的小游戏
- JQuery 获取URL中传递的参数
- vlan理论03-vlan映射
- aiml简介+源代码解析+中文分词(java)
- 世界需要简化第四篇:从地面发射人造卫星或战术导弹,如何控制其运行轨道?——算法经高度抽象简化,所有下标经仔细核对
- tplink软件升级有用吗_tplink路由器固件更新的方法
- xp计算机u盘重装系统,如何用u盘装xp系统_纯净版xp系统_xp系统安装教程 - u大师...
- CIO:人工智能将改变企业IT
- 为什么你的孩子拼命做题,成绩还总是上不去?
- 从零开始操作系统------探析保护模式
热门文章
- 中小企业智能化进销存管理模式
- Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路
- mbrfix修复拒绝访问_拒绝错误修复的一些正确原因
- 2021ICPC西安邀请赛赛后总结
- android 名片识别 简书,简书,也有了我的名片
- zadig对于java的支持
- 蚂蚁分类信息系统mymps对接阿里云短信接口
- 树莓派PICO入门:电脑连接简易树莓派PICO单片机,烧录,使用python进行简单代码操作。
- 【解决】ubuntu用vim编辑时退格键和上下左右键失灵的问题
- html中bak是什么文件怎么打开,bak文件怎么打开?小编教你bak文件打开方法