Pytorch基础:设置随机种子

相关阅读

Pytorch基础icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12457644.html?spm=1001.2014.3001.5482


        有时候,如果需要代码在多个运行中具有可重复性,可以通过以下方式来设置随机种子:

import torch
import numpy as np
import randomdef set_seed(seed):random.seed(seed)                       # 设置Python的随机种子np.random.seed(seed)                    # 设置NumPy的随机种子torch.manual_seed(seed)                 # 设置PyTorch的CPU随机种子torch.cuda.manual_seed(seed)            # 设置当前GPU的随机种子(如果使用GPU)torch.cuda.manual_seed_all(seed)        # 设置所有GPU的随机种子(如果使用多个GPU)torch.backends.cudnn.deterministic = True  # 确保每次卷积操作结果一致torch.backends.cudnn.benchmark = False     # 禁用CUDNN的自动优化# 调用这个函数并传递相同的seed值
set_seed(42)

        torch.manual_seed()函数设置了CPU的随机种子(在device=CPU的情况下)。

        torch.cuda.manual_seed()函数设置了当前GPU的随机种子(在device=当前GPU的情况下),有关当前GPU的设置方式,见Pytorch基础:torch.cuda.set_device函数。

        torch.cuda.manual_seed_all()函数设置了所有GPU的随机种子(在使用多个GPU的情况下)。

        上面三个函数会影响下面这些有随机性的函数:

  • torch.rand():生成[0, 1)区间的均匀分布随机数张量。
  • torch.randn():生成均值为0,方差为1的标准正态分布随机数张量。
  • torch.randint():生成指定范围内的随机整数张量。
  • torch.randperm():生成从0到n-1的随机排列张量(dataloader的打乱就是靠这个实现)。
  • torch.bernoulli():根据伯努利分布生成随机张量。
  • torch.normal():根据正态分布生成随机张量。
  • torch.randlike():生成[0, 1)区间的均匀分布随机数张量,与给定张量形状相同。
  • torch.nn.init.xavier_uniform_():根据Xavier均匀分布初始化权重。
  • torch.nn.init.kaiming_normal_():根据He正态分布初始化权重。
  • .....

        如果重新调用这三个函数,会导致重置相应的随机数生成器的状态,因此生成的随机数序列又会从头开始,如下所示。

import torch
import random
import numpy as npdef set_seed(seed):random.seed(seed)                       # 设置Python的随机种子np.random.seed(seed)                    # 设置NumPy的随机种子torch.manual_seed(seed)                 # 设置PyTorch的随机种子torch.cuda.manual_seed(seed)            # 设置PyTorch CUDA的随机种子(如果使用GPU)torch.cuda.manual_seed_all(seed)        # 设置所有GPU的随机种子(如果使用多个GPU)torch.backends.cudnn.deterministic = True  # 保证卷积操作的确定性torch.backends.cudnn.benchmark = False     # 禁用CUDNN的自动优化# 设置种子并生成随机张量
set_seed(42)
a = torch.rand(5)
print(a) # 输出:tensor([0.3745, 0.9507, 0.7319, 0.5987, 0.1560])# 再次设置相同的种子并生成随机张量
set_seed(42)
b = torch.rand(5)
print(b) # 输出:tensor([0.3745, 0.9507, 0.7319, 0.5987, 0.1560])

        torch.backends.cudnn.deterministic=True表示启用cuDNN的确定性行为,确保每次卷积操作产生相同的结果。因为cuDNN在默认情况下会进行某些非确定性的优化,这些优化有时会导致相同输入在不同次运行时产生略微不同的结果。

        torch.backends.cudnn.benchmark=False表示禁用cuDNN的自动优化功能。默认情况下cuDNN会根据每个卷积层的输入大小和配置动态选择最快的实现方法。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【亲测可行】最新ubuntu搭建rknn-toolkit2

文章目录 🌕结构图(ONNX->RKNN)🌕下载rknn-toolkit2🌕搭建环境🌙配置镜像源🌙conda搭建python3.8版本的虚拟环境🌙进入packages目录安装依赖库🌕测试安装是否成功🌕其它🌙rknn-toolkit2🌙rknn_model_zoo🌙关于部署的博客发布本文的时间为2024.10.13…

【进阶OpenCV】 (11)--DNN板块--实现风格迁移

文章目录 DNN板块一、DNN特点二、DNN函数流程三、实现风格迁移1. 图像预处理2. 加载星空模型3. 输出处理 总结 DNN板块 DNN模块是 OpenCV 中专门用来实现 DNN(Deep Neural Networks,深度神经网络) 模块的相关功能,其作用是载入别的深度学习框架(如 TensorFlow、Caf…

【微信小程序_11_全局配置】

摘要:本文介绍了微信小程序全局配置文件 app.json 中的常用配置项,重点阐述了 window 节点的各项配置,包括导航栏标题文字、背景色、标题颜色,窗口背景色、下拉刷新样式以及上拉触底距离等。通过这些配置可实现小程序窗口外观的个性化设置,提升用户体验。 微信小程序_11_全…

如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘

10 月 17 - 18日,由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会,本次活动邀请了 60 多位国际开源专家,汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…

回溯法与迭代法详解:如何从手机数字键盘生成字母组合

在这篇文章中,我们将详细介绍如何基于手机数字键盘的映射,给定一个仅包含数字 2-9 的字符串,输出它能够表示的所有字母组合。这是一个经典的回溯算法问题,适合初学者理解和掌握。 问题描述 给定一个数字字符串,比如 …

python基础路径的迁移

本人未安装anaconda或pycharm等,仅安装了某个python环境,因此以下方法仅针对基础python环境的迁移,不确保其他软件或插件正常运行 第一步将原python路径的整个文件夹剪切到新的路径下 第二步修改系统环境变量,将原来的python路径…

php 生成随机数

记录:随机数抽奖 要求:每次生成3个 1 - 10 之间可重复(或不可重复)的随机数,10次为一轮,每轮要求数字5出现6次、数字4出现3次、…。 提炼需求: 1,可设置最小数、最大数、每次抽奖生…

鸿蒙--商品列表

这里主要利用的是 List 组件 相关概念 Scroll:可滚动的容器组件,当子组件的布局尺寸超过父组件的视口时,内容可以滚动。List:列表包

AI+若依框架day02

项目实战 项目介绍 帝可得是什么 角色和功能 页面原型 库表设计 初始AI AIGC 提示工程 Prompt的组成 Prompt练习 项目搭建 点位管理 需求说明 库表设计

浏览器中使用模型

LLM 参数越来越小,使模型跑在端侧成为可能,为什么要模型跑在端侧呢,首先可以节省服务器的算力,现在 GPU 的租用价格还是比较的高的,例如租用一个 A10 的卡1 年都要 3 万多。如果将一部分算力转移到端侧通过小模型进行计…

【LeetCode热题100】分治-快排

本篇博客记录分治快排的4道题目&#xff1a;颜色分类、排序数组、数组中的第K个最大元素、数组中最小的N个元素&#xff08;库存管理&#xff09;。 class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int left -1,right n;for(int…

React速成

useRef获取DOM 组件通讯 子传父 function Son({ onGetMsg }){const sonMsg this is son msgreturn (<div>{/* 在子组件中执行父组件传递过来的函数 */}<button onClick{()>onGetMsg(sonMsg)}>send</button></div>) }function App(){const getMsg…

Python基础常见面试题总结

文章目录 1.深拷贝与浅拷贝2.迭代器3.生成器4.装饰器5.进程、线程、协程6.高阶函数7.魔法方法8.python垃圾回收机制 1.深拷贝与浅拷贝 浅拷贝是对地址的拷贝&#xff0c;只拷贝第一层&#xff0c;第一层改变的时候不会改变&#xff0c;内层改变才会改变。深拷贝是对值的拷贝&a…

智能驾驶|迈向智能出行未来,AI如何应用在自动驾驶?

自动驾驶通过人工智能&#xff08;AI&#xff09;、机器学习、传感器融合和实时数据处理&#xff0c;使车辆能够在无需人类干预的情况下自主驾驶。随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;与智能汽车的结合正在成为现代交通运输领域的热潮。无人驾驶…

selenium-Alert类用于操作提示框/确认弹框(4)

之前文章我们提到&#xff0c;在webdriver.WebDriver类有一个switch_to方法&#xff0c;通过switch_to.alert()可以返回Alert对象&#xff0c;而Alert对象主要用于网页中弹出的提示框/确认框/文本输入框的确认或者取消等动作。 Alert介绍 当在页面定位到提示框/确认框/文本录入…

Flythings学习(二)控件相关

文章目录 1 前言2 通用属性2.1 控件ID值2.2 控件位置2.3 背景色2.4 背景图2.5 显示与隐藏2.6 控件状态2.7 蜂鸣器控制 3 文本类TextView4 按键类 Button4.1 系统按键4.2 处理按钮长按事件4.3 处理按键触摸事件 5 复选框CheckBox6 单选组 RadioGroup7 进度条&#xff0c;滑块7.1…

Ubuntu卸载Mysql【ubuntu 24.04/mysql 8.0.39】

一、准备工作 查看ubuntu版本号 查看mysql版本号(如果没有安装mysql,这一步省略) 二、Ubuntu上卸载mysql(如果没有安装mysql这一步省略) 在Ubuntu上卸载MySQL可以通过以下步骤进行&#xff0c;确保完全移除MySQL相关的包和数据&#xff1a; 1. 停止MySQL服务 在卸载之前…

verilog端口使用注意事项

下图存在组合逻辑反馈环&#xff0c;即组合逻辑的输出反馈到输入(赋值的左右2边存在相同的信号)&#xff0c;此种情况会造成系统不稳定。比如在data_in20的情况下&#xff0c;在data_out0 时候&#xff0c;输出的数据会反馈到输入&#xff0c;输入再输出&#xff0c;从而造成不…

java项目之基于vue的工厂车间管理系统的设计源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于vue的工厂车间管理系统的设计。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于vu…

QT开发--多线程

第十四章 多线程 QThread 是 Qt 中实现多线程编程的核心类&#xff0c;提供跨平台线程管理。 使用 QThread 有两种方法&#xff1a; 1、 继承 QThread&#xff1a;重写 run() 方法&#xff0c;实现线程的具体操作。Qt4.8 之前较常用。 2、 使用 QObject 和 moveToThread()&…