设置随机种子

news/2024/11/8 18:51:31/

随机种子

在看一些论文的代码的时候总是会遇到种子(seed)的设置,一直没有太在意,就知道是为了使得代码的结果可以正确复现,今天做个总结。经常见到的是torch.manual_seed()和np.random.seed()。

torch.manual_seed()

官方api

注意,torch.manusl_seed()为cpu设置随机种子,torch.cuda.manual_seed()为GPU设置随机数种子,torch.cuda.manual_seed_all()为所有GPU设置随机数种子。random.seed()为random模块设置随机种子。

这个是pytorch中的随机种子的设置,torch.manual_seed()函数经常与torch.rand()或者troch.randn这样的生成随机数的函数搭配使用。通过设置一个固定的随机种子可以使得每次生成的随机数是相同的,如果不指定seed的值,每次生成的随机数可能就不一样。具体是什么样的需要看代码来理解。

  1. 不设置随机种子时候
# 第一遍执行程序
a = torch.randn(2,2)
b = torch.randn(2,2)# a的值输出为下
tensor([[ 0.3923, -0.2236],[-0.3195, -1.2050]])
# b的值输出为下
tensor([[ 1.0445, -0.6332],[ 0.5731,  0.5409]])
# 第二遍执行程序
a = torch.randn(2,2)
b = torch.randn(2,2)# a的值输出为下
tensor([[-0.3919, -1.0427],[ 1.3186,  0.7476]])
# b的值输出为下
tensor([[-1.3265, -1.2413],[-0.1028, -0.9498]])
  1. 设置随机种子
# 第一遍执行程序
torch.manual_seed(1)
a = torch.randn(2,2)
b = torch.randn(2,2)
# a的值输出为下
tensor([[0.6614, 0.2669],[0.0617, 0.6213]])
# b的值输出为下
tensor([[-0.4519, -0.1661],[-1.5228,  0.3817]])
# 第二遍执行程序
torch.manual_seed(1)
a = torch.randn(2,2)
b = torch.randn(2,2)
# a的值输出为下
tensor([[0.6614, 0.2669],[0.0617, 0.6213]])
# b的值输出为下
tensor([[-0.4519, -0.1661],[-1.5228,  0.3817]])

这时我们就可以发现,在设置了随机种子之后,第一遍执行程序和第二遍执行程序生成的随机数是一样的。同时我们也要注意在同一个程序的两次调用中生成的随机数是不一样的。

np.random.seed()

可以与random.randmom()配合使用。

例子

下面是一种随机种子的设置。

def setup_seed(seed):np.random.seed(seed) # numpy 的设置random.seed(seed)  # python random moduleos.environ['PYTHONHASHSEED'] = str(seed) # 为了使得hash随机化,使得实验可以复现torch.manual_seed(seed) # 为cpu设置随机种子if torch.cuda.is_available():torch.cuda.manual_seed(seed) # 为当前GPU设置随机种子torch.cuda.manual_seed_all(seed) # 如果使用多GPU为,所有GPU设置随机种子torch.backends.cudnn.benchmark = False # 设置为True,会使得cuDNN来衡量自己库里面的多个卷积算法的速度,然后选择其中最快的那个卷积算法。torch.backends.cudnn.deterministic = True # 每次返回的卷积算法将是确定的,即默认算法。如果配合上设置 Torch 的随机种子为固定值的话,# 应该可以保证每次运行网络的时候相同输入的输出是固定的

http://www.ppmy.cn/news/357439.html

相关文章

リィカ / 莉卡

目录 基本资料面板值(无天冥加成)天冥奖励 战斗宣言(VC)技能 回到人物索引 基本资料 NS(3~4★)NS(5★)第3章入队 (Ver 1.0.0)外传7(KMS社)后日谈解放5★ (Ver 2.0.50)パトリアークの書グラティネルの詩篇(ゼノ・ドメ…

Random带种子与不带种子的区别

带种子的Random 看下面代码 Testpublic void batchSaveTest() {Random random new Random();random.setSeed(10000L);List<Info> list new ArrayList<>();LongStream.range(0L, 5L).forEach(idx -> {int i random.nextInt();System.out.println(i);});}第一…

python爬虫torrentkitty的种子

python爬虫torrentkitty的种子 话不多说上源代码&#xff0c;只要把lxml的库安装下就好了 这个程序完全是解放双手&#xff0c;而且没有弹窗网页等困扰 __author__ JianqingJiang # -*- coding: utf-8 -*- import urllib2 from lxml import etree import os pre_url http://w…

以系统时间为种子种随机数__2018.05.27

#include <iostream> #include <vector>//包含c STL向量容器的代码 #include <functional>//包含c STL函数对象的代码 二元函数对象 #include <algorithm>//包含c STL的泛型算法实现 sort find #include <time.h>//以系统时间为种子种随机数usin…

matlab 随机数种子

matlab 的随机数是伪随机数 在使用rand前加上 rand&#xff08;‘state’,sum(100*clock)&#xff09;; 这样可以把随机数跟时间绑定起来&#xff0c;时间不同&#xff0c;随机数不同

随机种子的理解

1、随机数 在百度百科中对随机数的定义为&#xff1a; 真正的随机数是使用物理现象产生的&#xff1a;比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等&#xff0c;这样的随机数发生器叫做物理性随机数发生器&#xff0c;它们的缺点是技术要求比较高。 根据定义可以看…

深度学习中的随机种子

深度学习代码中的随机种子 深度学习网络模型中初始的权值参数通常都是初始化成随机数 而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感 为了能够完全复现作者的开源深度学习代码&#xff0c;随机种子的选择能够减少一定程度上 算法结果的随机性&#xff0c;也…

随机数种子(seed)

在科学技术和机器学习等其他算法相关任务中&#xff0c;我们经常需要用到随机数&#xff0c;为了把握随机数的生成特性&#xff0c;从随机数的随机无序中获得确定和秩序。我们可以利用随机数种子(random seed)来实现这 一目标&#xff0c;随机数种子&#xff0c;可以使得引入了…