yolov5/v7/v8随机种子固定方法

news2024/12/27 16:01:38

参考:https://blog.csdn.net/qq_45062768/article/details/133852543
https://blog.csdn.net/qq_45062768/article/details/133204618
在这里插入图片描述
yolov7的
在这里插入图片描述

import pkg_resources as pkg
def check_version(current='0.0.0', minimum='0.0.0', name='version ', pinned=False, hard=False, verbose=False):
    # Check version vs. required version
    current, minimum = (pkg.parse_version(x) for x in (current, minimum))
    result = (current == minimum) if pinned else (current >= minimum)  # bool
    return result


def set_seeds(seed=0, deterministic=False):
    # Initialize random number generator (RNG) seeds https://pytorch.org/docs/stable/notes/randomness.html
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)  # for Multi-GPU, exception safe
    # torch.backends.cudnn.benchmark = True  # AutoBatch problem https://github.com/ultralytics/yolov5/issues/9287
    if deterministic and check_version(torch.__version__, '1.12.0'):  # https://github.com/ultralytics/yolov5/pull/8213
        torch.use_deterministic_algorithms(True)
        torch.backends.cudnn.deterministic = True
        os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'
        os.environ['PYTHONHASHSEED'] = str(seed)

二、开启随机种子设置
在train.py中Ctrl+F搜索init_seeds函数并将其注释,导入set_seeds函数:

# init_seeds(2 + rank)
set_seeds(2 + rank, deterministic=True)

这样随机种子就设置完成,确保每次运行时的随机数生成是可重复的。不过请注意,设置种子只能保证模型在相同的种子值下生成相同的随机数序列,但不能保证模型的训练结果完全相同。(少量数据集下训练结果是完全相同的)。

固定种子
随机种子:
torch.manual_seed(seed) 调用的cpu的种子固定
torch.cuda.manual_seed(seed) 调用的gpu种子固定
torch.cuda.manual_seed_all(seed) 调用的全部gpu种子固定

np.random.seed(seed) 用于固定多线程相关
random.seed(seed)
os.environ['PYTHONHASHSEED'] =str(seed) 固定哈希算法种子,比如set等操作都有涉及,
注意看到的文档说哈希相关调用较早,设置种子的时候可能存在滞后,建议直接export设置

模型训练速度会变慢!
torch.backends.cudnn.deterministic = True 是否使用确定性算法,1.9版本之后被最下面的替代
torch.backends.cudnn.benchmark = False 是否关闭卷积优化,会影响速度

#torch.backends.cudnn.enabled = True 启用或禁用cudnn加速,这个应该不影响啊!  
os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':16:8' 这个是cuda10.2之后建议指定,里面的比值也有多种
torch.use_deterministic_algorithms(True) 1.9版本之后的,更为严格

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2181317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer算法7个面试常见问题

1.Transformer为何使用多头注意力机制?(为什么不使用一个头) 英文论文中是这么说的: Multi-head attention allows the model to jointly attend to information from different representation subspaces at different position…

AtCoder Beginner Contest 373(ABCDEF 题)视频讲解

A - September Problem Statement There are 12 12 12 strings S 1 , S 2 , … , S 12 S_1, S_2, \ldots, S_{12} S1​,S2​,…,S12​ consisting of lowercase English letters. Find how many integers i i i ( 1 ≤ i ≤ 12 ) (1 \leq i \leq 12) (1≤i≤12) satisfy …

【line features】线特征(2)

【line features】线特征(2) 1. line features实现原理1. **初始化与参数设置**:2. **图像读取**:3. **线特征检测**:4. **线特征描述子计算**:5. **特征匹配**:6. **匹配结果可视化**&#xff…

递归算法介绍和【题解】——数楼梯

递归算法介绍和【题解】——数楼梯 1.递推算法介绍2.数楼梯题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.思路解析2.AC代码 1.递推算法介绍 有些目标是宏大的,比如如果你想找到一个好工作,需要先把面试通过。要把面试通过,就需…

c++11~c++20 结构化绑定

结构化帮绑定可以作用于3中类型 一、原生数组类型 结果: 备注:绑定到原生数组所需条件仅仅是要求别名的数量于数组元素的个数一致,这里的x,y,z分别绑定到a[0],a[1],a[2] 二、绑定到结构体和类对象 结果:…

C99中的变长数组

在C99标准之前,从语言在创建数组的时候,指定数组的大小只能使用常量和表达式,或者数据初始化的时候,可以省略数组大小。 1.int arr[5]{1,2,3,4,4}; 2.int arr[24]{1,2,3,4,5,6}; 3.int arr[]{1,2,3,3,4,5,6}; 这样的语法限制不够灵…

新疆阿克苏地区新和县召开2024年重大项目高质量发展推进会

五一水库及生态修复产业融合发展等14个项目动工兴建 9月29日,新疆阿克苏地区新和县举行2024年重大项目高质量发展推进会上,五一水库生态修复暨产业融合发展重点项目等14个项目正式动工兴建。 据了解,此次开工的14个项目,总投资17…

LPDDR4芯片学习(二)——Functional Description

一、LPDDR4寻址表 以每个die容量为4GB为例: Memory density(per channel) 2Gb:每个通道大小为2Gb,一个die有两个通道Configuration 16Mb 16DQ 8 banks 2 channels :16Mb的寻址空间16位每个channels8个bank*每个die两channels。1…

电影《749局》酷燃首映 苗苗神秘感大片释出氛围感拉满

2024 年 9 月 30 日,电影《749 局》在北京举办首映礼,导演陆川携主创王俊凯、苗苗、郑恺、任敏、李晨、杨皓宇出席,演员苗苗在片中饰演 749 局成员夏婳,这个角色天赋异禀,拥有特殊异能,为影片增添一抹神秘色…

从异步传染浅谈代数效应

如果你经常使用并且关注React,你一定会在不少地方见过"代数效应"(algebra effect) 这个抽象概念。可能是翻译和过度学术的缘故,我看了很多文章才大致理解,在这里简单记录一下。 try/catch & try/handle 你一定使用…

通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测

CSMA/CD:载波监听多路访问/冲突检测 CSMA/CD(Carrier Sense Multiple Access/Collision Detect),即载波监听多路访问/冲突检测,是一种用于数据通信的介质访问控制协议,广泛应用于局域网(特别是以…

SQL增删查改操作

目录 数据库概述 SQL基础操作 SQL通用语法 数据类型 SQL语句的分类 DDL(数据库定义,表定义,字段定义) 数据库操作 表操作 DDL小结 DML(数据的增删改,数据操作语言) DQL(查询) DQL小节 数据库概述 数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软…

养老院管理系统(含源码+sql+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 养老院管理系统拥有两种角色:管理员和护工 管理员:用户管理、老人信息管理、事故记录管理、入住费用管理、护工薪资管理、护工请假管理、床位管理、请假管理等 护…

消息中间件:RabbitMQ

消息中间件:RabbitMQ 前言安装Window安装Linux安装 管理页面什么是RabbitMQ?入门基本概念简单队列工作队列(Work Queues)发布/订阅(Publish/Subscribe)临时队列 路由(Routing)主题&a…

NanoDet安装教程

目录 1.安装NanoDet 1.1官网下载NanoDet 1.2 创建虚拟conda环境 1.3安装Pytorch库 2.侦测 3.训练 3.1yml文件修改 3.训练 3.1yml文件修改 轻量级模型 NanoDet-m 目标检测框架: YOLO 、 SSD 、 Fast R-CNN 等模型 ;但模型太大,不适合移植到移…

HTTP状态码全解

文章目录 常见状态码1XX Informational(请求正在处理)2XX Success(请求成功)3XX Redirection(重定向)4XX Client Error(客户端错误)5XX Server Error(服务器错误&#xf…

ros2安装完成后重要的一步

安装完成ros2之后,每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题,我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

浸没式密封连接器

在当今科技快速发展的背景下,电子设备的整合度与性能需求持续提高,而连接技术作为电子设备间交互的关键,其重要性显而易见。在各式各样的连接技术当中,浸没式密封连接器凭借其独到设计和高超性能,在特定使用环境中显示…

学习经验分享【38】YOLOv11解读——最新YOLO版本

YOLO算法更新速度很快,已经出到V11版本,后续大家有想发论文或者搞项目可更新自己的baseline了。后续将改进YOLOv11算法,有需要的朋友可关注,我会持续进行更新。 YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代版本&#x…

《Linux从小白到高手》理论篇(七):Linux的时间管理运行级别启动过程原理详解

List item 本篇将介绍Linux的时间管理&运行级别相关知识,并将深入介绍Linux的启动过程及原理。 Linux的时间管理 Linux 时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称 RTC)时钟。系统时…