将随机数设成3407,让你的深度学习模型再涨一个点!文再附3种随机数设定方法
随机数重要性
深度学习已经在计算机视觉领域取得了巨大的成功,但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现?为什么使用同样的代码,就是和别人得到的结果不一样?怎么样才能保证自己每次跑同一个实验得到的结果都是一样的?
其中一个可能的原因就是随机数的选择。在本文中,我们将着重探讨如何通过合理设置随机数来提高深度学习模型的准确性(涨点大法)。以及如何固定随机数来保证实验的可重复性
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设置随机种子(多块GPU)torch.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设置随机种子(多块GPU)
pytorch中,会对模型的权重等进行初始化,因此也要设定随机数种子
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(seed=3407)
和pytorch中使用方法是一样的,这个函数就是已经设定好了各种各样的随机数。使用起来更方便。亲测有用。
文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连

相关文章:
将随机数设成3407,让你的深度学习模型再涨一个点!文再附3种随机数设定方法
随机数重要性 深度学习已经在计算机视觉领域取得了巨大的成功,但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现?为什么使用同样的代码,就是和别人得到的结果不一样?怎么样才能保证自己每次跑同一个实验得到的…...
Spring后端HttpClient实现微信小程序登录
这是微信官方提供的时序图。我们需要关注的是前后端的交互,以及服务端如何收发网络请求。 小程序端 封装基本网络请求 我们先封装一个基本的网络请求。 const baseUrl"localhost:8080" export default{sendRequsetAsync } /* e url:目标页…...
Linux下部署MySQL-MHA环境
目前的环境如下:centos7 有四台虚拟机,20,21,22,23 20为master,21,22,23 为20的从库,21 为管理节点。 搭建MySQL主从复制的,可以参考我之前的文章 MHA&#…...
DaoWiki(基于Django)开发笔记 20231114-阿里云mysql外部访问
文章目录 创建mysql用户,用户远程访问配置阿里云安全策略下载安装mysql workbench 创建mysql用户,用户远程访问 创建用户 CREATE USER dao_wiki% IDENTIFIED BY password;授权访问dao_wiki数据库 GRANT ALL PRIVILEGES ON dao_wiki.* TO dao_wiki%; F…...
【UE5】 虚拟制片教程
目录 效果 步骤 一、下载素材 二、将视频转成PNG序列 三、开始虚拟制片 效果 步骤 一、下载素材 首先下载绿幕视频素材 链接:百度网盘 请输入提取码 提取码:jyfk 二、将视频转成PNG序列 打开“Adobe Premiere Pro”,导入素材 …...
集成Line、Facebook、Twitter、Google、微信、QQ、微博、支付宝的三方登录sdk
下载地址: https://githubfast.com/anerg2046/sns_auth 安装方式建议使用composer进行安装 如果linux执行composer不方便的话,可以在本地新建个文件夹,然后执行上面的composer命令,把代码sdk和composer文件一起上传到项目适当位…...
2022年09月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 已知字符串:s=“语文,数学,英语”,执行print(s.split(“,”))语句后结果是?( ) A: [‘语文’, ‘数学’, ‘英语’] B: [语文, 数学, 英语] C: [‘语文, 数学, 英语’] D: [‘语…...
C. Number of Pairs
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given an array a� of n� integers. Find the number of pairs (i,j)(�,�) (1≤i<j≤n1≤…...
Js 保留关键字
JavaScript 关键字用于标识要执行的操作,和其他任何编程语言一样,JavaScript 保留了一些关键字为自己所用;这些关键字有些在目前的版本中可能没有使用,但在以后 JavaScript 扩展中会用到。 以下是JS中最重要的保留关键字…...
nodejs+vue+python+PHP+微信小程序-安卓-房产中介管理信息系统的设计与实现-计算机毕业设计
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
【系统架构设计】架构核心知识: 3.5 Redis和ORM
目录 一 Redis 1 Redis与MemCache 2 Redis分布式存储方案 3 Redis集群切片的方式 4 Redis数据分片...
linux时间同步
搭建集群时,都会先设置时间同步,否则会出现多种问题。 方式一: 1.安装ntp软件 yum install -y ntp 2.更新时区 删除原有时区:sudo rm -f /etc/localtime 加载新时区:sudo ln -s /usr/share/zoneinfo/Asia/Shangh…...
mysql++库connected与ping方法的区别
mysql库connected与ping方法的区别 前段时间开发公司代码的时候,我写了一个多线程调用数据库的函数,每个线程都是要连接数据库的,为了防止在查找数据之前,线程连接数据库断开,我使用定时器每20s检测一下线程连接数据库…...
拆位线段树 E. XOR on Segment
Problem - E - Codeforces 区间求和,区间异或的操作跟线段树的区间求和、区间相见相似,考虑用线段树。 发现数组初始值最多是1e6,有不到25位,可以知道异或最大值是这些位数全是1的情况。 发现可以对每一位进行运算就和。 我们开…...
JVM及其垃圾回收机制(GC)
目录 一.JVM内存区域划分 二.JVM类加载机制 类加载过程 类加载的时机 双亲委派模型 三.JVM垃圾回收机制(GC) GC工作过程 1.找到垃圾/判断垃圾 (1)引用计数【python/PHP】 (2)可达性分析【Java】 2.对象释放…...
友元的三种实现
友元的三种实现 全局函数做友元类做友元成员函数做友元 #include <iostream> #include <string> using namespace std;//友元的三种实现 // //* 全局函数做友元 //* 类做友元 //* 成员函数做友元class Building {//告诉编译器 goodGay全局函数 是 Building类的好…...
聊聊logback的DuplicateMessageFilter
序 本文主要研究一下logback的DuplicateMessageFilter TurboFilter ch/qos/logback/classic/turbo/TurboFilter.java public abstract class TurboFilter extends ContextAwareBase implements LifeCycle {private String name;boolean start false;/*** Make a decision …...
WordPress 文档主题模板Red Line -v0.2.2
此主题作为框架,做承载第三方页面之用,例如飞书文档等, 您可以将视频图片等资源放第三方文档上,通过使用此主题做目录用。 此主题使用前后端分离开发,也使用了一些技术尽量不影响正常的SEO,还望注意。 源码…...
网络和Linux网络_1(网络基础)网络概念+协议概念+网络通信原理
目录 1. 网络简介 1.1 独立模式和互联网络模式 1.2 局域网LAN和广域网WAN 2. 协议和协议分层 2.1 协议的作用 2.2 协议分层 2.3 OSI七层模型 3.2 TCP/IP四层(五层)模型 3. 网络通信原理 3.1 协议报头 3.2 局域网和解包分用 3.3 广域网和跨网络 4. 网络中的地址 4…...
AI生成PPT工具——Gamma,结合GPT生成不错的效果
AI生成PPT工具——Gamma,结合GPT生成不错的效果 先告诉GPT我现在要参加一个比赛,请他帮忙梳理一下内容。当然整个过程需要不断调整,GPT生成的内容也不是一次就是最好的 不断调整之后让其列出提纲即可,如下: 紧接着我们…...
Hive元数据存储选型避坑指南:从内置Derby到外置MySQL,生产环境配置与迁移实战
Hive元数据存储选型避坑指南:从内置Derby到外置MySQL,生产环境配置与迁移实战 在数据仓库的建设过程中,Hive作为Hadoop生态系统中最重要的数据仓库工具之一,其元数据存储的选型和配置往往决定了整个系统的稳定性和扩展性。很多团队…...
Tauri Android 打包原理与实战指南
Tauri Android 打包原理与实战指南 基于 JoyaLand 项目的实际打包经验整理,记录原理、流程与踩坑解决方案。 一、Tauri Android 打包架构原理 1.1 整体架构 ┌─────────────────────────────────────────────┐ │ …...
企业语音 AI 困境待解:用户体验成破局关键
【导语:语音 AI 智能助手市场规模预计大幅增长,但企业应用成熟度低。当前企业语音 AI 面临诸多困境,需从用户体验出发解决问题,本文探讨了相关原则、研究方法及对自主语音 AI 的影响。】语音 AI 市场增长与企业应用困境语音 AI 智…...
DAY4--SQL限制返回行数查询
SQL基础入门:电商用户数据限制返回行数查询实操 这一章能解决什么电商工作问题? 这一章要学的LIMIT,是我认为电商数据分析新人最应该刻进肌肉记忆的语法。因为它直接关系到两件事:你的工作效率,以及你的职场安全。 我先…...
Linux端口占用排查:工具与实战技巧
1. 网络端口占用排查的必要性遇到"Address already in use"错误提示时,每个Linux系统管理员都会心头一紧。这种端口冲突问题不仅影响服务启动,还可能导致关键业务中断。我刚入行时就曾因为Nginx和Apache争抢80端口,导致公司官网瘫痪…...
实战指南:用Python的pyttsx3库打造你的专属语音助手
1. 从零认识pyttsx3:你的代码会说话 第一次听到电脑用标准播音腔朗读出我写的文字时,那种感觉就像小时候收到会说话的生日贺卡。pyttsx3这个神奇的Python库,能让任何文本通过声卡变成人声。不同于需要联网的语音合成服务,它完全离…...
2025届最火的五大AI学术方案实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI写作工具,是借助自然语言处理技术所开发出来的智能软件,它可以辅助…...
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天 1. nanobot核心优势解析 nanobot作为一款超轻量级个人AI助手解决方案,在技术架构和用户体验上都有显著突破。这个受OpenClaw启发的项目,仅用约4000行代码就实现了完整的智能…...
AnimateDiff与Three.js结合:Web端3D文生视频实践
AnimateDiff与Three.js结合:Web端3D文生视频实践 最近在折腾AI视频生成,发现一个挺有意思的事儿:AnimateDiff这类文生视频模型效果越来越好,但生成的东西大多还是“平面”的,想把它放到网页里,特别是做成有…...
C语言完美演绎6-18
/* 范例:6-18 */#include <stdio.h> #include <conio.h>int main(){int a;printf("请输入你的分数(0-100)");scanf("%d",&a);if(a>0){if(a<100){ printf("你输入的分数是%d",a); }else{ printf("你输入的…...
