手机大型网站,官网建设银行,做交友信息网站可行么,施工企业既搞建筑安装又搞建筑材料销售其应纳税种为随机数重要性
深度学习已经在计算机视觉领域取得了巨大的成功#xff0c;但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现#xff1f;为什么使用同样的代码#xff0c;就是和别人得到的结果不一样#xff1f;怎么样才能保证自己每次跑同一个实验得到的…随机数重要性
深度学习已经在计算机视觉领域取得了巨大的成功但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现为什么使用同样的代码就是和别人得到的结果不一样怎么样才能保证自己每次跑同一个实验得到的结果都是一样的
其中一个可能的原因就是随机数的选择。在本文中我们将着重探讨如何通过合理设置随机数来提高深度学习模型的准确性涨点大法。以及如何固定随机数来保证实验的可重复性
arxiv上有篇极其离谱又很有深意的文章 torch.manual seed(3407) is all you need: On the influence of random seeds in deep learning architectures for computer vision. 论文链接 是的你没看错文章标题就言简意赅告诉你torch.manual seed(3407) is all you need
而且我发现很多群友已经用上了魔法是我out了
这篇文章做了很多实验就解决了三个问题 关于随机种子选择的分数分布是什么答随机种子变化时的精度分布相对尖锐这意味着结果相当集中于平均值。一旦模型收敛这种分布就相对稳定这意味着有些种子本质上比其他种子好。 是否有黑天鹅即有些种子会产生截然不同的结果答是。在对10000个种子的扫描中作者获得了接近2%的最大和最小精度差异这高于计算机视觉社区通常使用的重要阈值。(随机数设置的对没准能涨2个点) 对较大数据集的预处理是否减轻了种子选择引起的差异答是它当然减少了由于使用不同种子而产生的差异但并没有抹去这种差异在Imagenet上最大和最小准确度之间的差异仍然有0.5%
全文总结随机数的选择很重要当你涨点无果时试下3407没准儿有奇效~
随机数设定
那随机数怎么设置在哪里设置呢3种设定方法任你选最后一种最简单
1.pytorch中设定随机数
import numpy as np
import torch
import random
import osseed_value 3407 # 设定随机数种子np.random.seed(seed_value)
random.seed(seed_value)
os.environ[PYTHONHASHSEED] str(seed_value) # 为了禁止hash随机化使得实验可复现。torch.manual_seed(seed_value) # 为CPU设置随机种子
torch.cuda.manual_seed(seed_value) # 为当前GPU设置随机种子只用一块GPU
torch.cuda.manual_seed_all(seed_value) # 为所有GPU设置随机种子多块GPUtorch.backends.cudnn.deterministic True以上代码放在所有使用随机数前就行。我习惯性放在import之后在做事情前先把随机数设定好比较安全。
下面进行简单地分析。愿意多看一点的继续忙的直接粘贴复制上面代码即可。
上述代码的随机数主要是三个方面的设定。
1. python 和 numpy 随机数的设定
np.random.seed(seed_value)
random.seed(seed_value)
os.environ[PYTHONHASHSEED] str(seed_value) # 为了禁止hash随机化使得实验可复现。如果读取数据的过程采用了随机预处理(如RandomCrop、RandomHorizontalFlip等)那么对python、numpy的随机数生成器也需要设置种子。
2. pytorch 中随机数的设定
torch.manual_seed(seed_value) # 为CPU设置随机种子
torch.cuda.manual_seed(seed_value) # 为当前GPU设置随机种子只用一块GPU
torch.cuda.manual_seed_all(seed_value) # 为所有GPU设置随机种子多块GPUpytorch中会对模型的权重等进行初始化因此也要设定随机数种子
3. Cudnn 中随机数的设定 cudnn中对卷积操作进行了优化牺牲了精度来换取计算效率。如果需要保证可重复性可以使用如下设置
torch.backends.cudnn.deterministic True另外也有人提到说dataloder中可能由于读取顺序不同也会造成结果的差异。这主要是由于dataloader采用了多线程(num_workers 1)。目前暂时没有发现解决这个问题的方法但是只要固定num_workers数目线程数不变基本上也能够重复实验结果。
2.为随机数设定代码添加活动模板
这么长的代码每次都要敲一遍或者粘贴复制也很麻烦。因此可以在pycharm里面设定一个模板就可以快捷输入了。大致过程如下 想要细节描述的可以百度 pycharm 活动模板的设定。 当我要使用这段代码的时候敲自己定义的快捷字符串就可以了
3 MONAI框架随机数设定
Monai 对随机数的设定一行代码就搞定了
from monai.utils import set_determinism
set_determinism(seed3407)和pytorch中使用方法是一样的这个函数就是已经设定好了各种各样的随机数。使用起来更方便。亲测有用。 文章持续更新可以关注微公【医学图像人工智能实战营】获取最新动态一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主手把手带你做项目打比赛写论文。凡原创文章皆提供理论讲解实验代码实验数据。只有实践才能成长的更快关注我们一起学习进步~ 我是Tina, 我们下篇博客见~
白天工作晚上写文呕心沥血
觉得写的不错的话最后求点赞评论收藏。或者一键三连