Pytorch为什么总要设置随机种子

在pytorch中总能看到以 第一行有个设置随机种子的函数?它到底有啥作用?

def set_seed(seed=1):random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)

参考博客:
https://blog.csdn.net/qq_24224067/article/details/106451064

1.随机种子是什么?

随机种子是针对 随机方法 而言的。

随机方法:常见的随机方法有 生成随机数,以及其他的像 随机排序 之类的,后者本质上也是 基于生成随机数来实现的。在深度学习中,比较常用的随机方法的应用有:网络的随机初始化,训练集的随机打乱 等。

举个例子,如果我们简单调用 random.random() 来生成随机数,那么每一次生成的数都是随机的。但是,当我们预先使用 random.seed(x) 设定好随机种子,基于这个种子来执行随机算法,这个时候我们 得到的随机数序列是相同的。

随机种子的工作原理(计算机底层是如何实现生成随机数的)?

虽然计算机很擅长做精确计算,但是它们处理随机事件时非常不靠谱。
实际上,计算机中的所有随机数都是 伪随机数,是靠 随机数算法 生成的,大多数随机数算法都在努力创造一种 呈均匀分布且难以预测的 数据序列。
所有的随机数算法在初始化阶段都需要一个 随机“种子”(random seed),完全相同的种子每次将产生相同的“随机”数序列。如果我们没有手动进行显式设置,系统则 默认根据时间来选择这个值,此时每次生成的随机数因时间差异而不同。

2.随机种子的一些使用特性

① 随机种子的取值范围?
可以是任意数字,如10,1000

② 随机种子的作用范围

np.random.seed(0)
print(np.random.rand(3))
print(np.random.rand(3))

输出:

[0.5488135  0.71518937 0.60276338]
[0.54488318 0.4236548  0.64589411]

再次运行程序,会输出同一组随机数:

[0.5488135  0.71518937 0.60276338]
[0.54488318 0.4236548  0.64589411]

想要在同一个程序中产生同一组随机数,需要在下一个函数前设置一个相同的随机种子

np.random.seed(0)
print(np.random.rand(3))
np.random.seed(0)
print(np.random.rand(3))

输出

[0.5488135  0.71518937 0.60276338]
[0.5488135  0.71518937 0.60276338]

3.为什么需要随机种子?

打个比方,在机器学习,深度学习算法中,我们往往会用到随机向量,随机矩阵,这使得我们每次运行算法计算出来的结果是不一致的,会为我们调试算法带来麻烦。

基于随机种子来实现代码中的随机方法,能够 保证多次运行此段代码能够得到完全一样的结果,即保证结果的 可复现性,这样 别人跑你的代码的时候也能够很好地复现出你的结果。

4.PyTorch 中随机种子的设置方法

【参考资料】Pytorch设置随机数种子,使训练结果可复现。
在使用 PyTorch 时,如果希望通过设置随机数种子,在 GPU 或 CPU 上固定每一次的训练结果,则需要在程序执行的开始处添加以下代码:

def setup_seed(seed):torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)np.random.seed(seed)random.seed(seed)torch.backends.cudnn.deterministic = True
# 设置随机数种子
setup_seed(20)
# 预处理数据以及训练模型
# ...
# ...

Pytorch为什么总要设置随机种子相关推荐

  1. Pytorch(6)-设置随机种子,复现模型结果

    设置随机种子,复现模型结果 1.Python本身的随机因素 2.numpy随机因素 3.pytorch随机因素 在很多情况下,我们希望能够复现实验的结果.为了消除程序中随机因素的影响,我们需要将随机数 ...

  2. Pytorch设置随机种子

    一.网上方法 # 定义一个可以设置随机种子的函数 def setup_seed(seed):torch.manual_seed(seed)torch.cuda.manual_seed_all(seed ...

  3. python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  4. 设置随机种子之后,网络训练结果仍然不同的解决方法(针对随机采样的数据集)torch设置随机种子,num_worker对数据采样的影响。

    网络训练结果无法复现 设置随机种子 应该为torch, numpy,以及Python设置随机种子,并提高torch卷积精度. def set_seed(seed):random.seed(seed)n ...

  5. python随机种子怎么用_python设置随机种子实例讲解

    python设置随机种子实例讲解 对于原生的random模块 import random random.seed(1) 如果不设置,则python根据系统时间自己定一个. 也可以自己根据时间定一个随机 ...

  6. 设置随机种子的函数: srand(种子);的重要性

    游戏中,许多情况都是随即发生的.还有一些图案程序,例如屏保,也是随即运动的.这就需要用随机函数. 随机函数很简单,只有一个:rand() 该函数返回 0-32767 之间的一个整数.(不需要记住 32 ...

  7. 【小家java】Java中Random ThreadLocalRandom 设置随机种子获取随机数精讲

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  8. 开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  9. python正确设置随机种子

    import torch import numpy as np import random# torch.mamual_seed(seed) # 为CPU设置种子 torch.cuda.manual_ ...

最新文章

  1. c语言编程之求组合数的和,给定求组合数公式为:C(n,m)=m!/n!(m-n)!,编一程序,输入m和n的值 ,求C(n,m)的值...
  2. array_unique() 去重复
  3. 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync
  4. JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】
  5. C++ Primer 5th笔记(chap 12 动态内存)shared_ptr
  6. TCP连接之报文首部
  7. gradle的多项目构建(九)
  8. 如何在string.Format方法中输出大括号({})
  9. php a链接怎么传id_PHP函数参数的传递
  10. MongoDb系列文章
  11. osg学习(四十五)有关倾斜摄影的osgb、gltf、3DTiles格式
  12. PowerShell抓取电脑序列号
  13. 人行发布2018年度银行科技发展获奖名单
  14. 开源语音助手_开源语音助手软件入门
  15. linux搭建摄像头,Linux环境下配置虚拟摄像头akvcam
  16. Web 开发项目的6个最佳Java框架
  17. BigDecimel转人民币大写
  18. 图解LeetCode06:Z字形变换
  19. JAVA获取指定日期
  20. 休谟问题---至今无解的难题!

热门文章

  1. debian linux 关闭防火墙,debian怎么样关闭防火墙
  2. [Note] 多项式全家桶 小球与盒子 分拆数
  3. 我看三十而立的80后
  4. [SPI+DMA] 驱动WS2812B显示时钟
  5. 2019网易互娱8.9笔试
  6. CTF简单的文件修复
  7. 小程序scroll-view,滚动到最低_小程序滚动到底部
  8. 激活硬盘被关闭的DMA模式
  9. 【专家级前端JavaScript面试题】快来尝试一下
  10. 低频理疗按摩仪8种常用基本波形