为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,batch size 都是一样?
固定随机数种子是非常重要的。
但是如果你使用的是PyTorch等框架,还要看一下框架的种子是否固定了。还有,如果你用了cuda,别忘了cuda的随机数种子。这里还需要用到torch.backends.cudnn.deterministic和torch.backends.cudnn.benchmark确保调度的卷积算法一致

一、torch.backends.cudnn.deterministic是啥?

torch.backends.cudnn.deterministic=True每次返回的卷积算法将是确定的,即默认算法
如果配合上设置 Torch 的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的,代码大致这样

def init_seeds(seed=0):torch.manual_seed(seed) # sets the seed for generating random numbers.torch.cuda.manual_seed(seed) # Sets the seed for generating random numbers for the current GPU. It’s safe to call this function if CUDA is not available; in that case, it is silently ignored.torch.cuda.manual_seed_all(seed) # Sets the seed for generating random numbers on all GPUs. It’s safe to call this function if CUDA is not available; in that case, it is silently ignored.if seed == 0:torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = False
编辑于 2020-05-15

二、torch.backends.cudnn.benchmark是啥?

如果设置为True,可能无法保证结果可以复现。
torch.backends.cudnn.benchmark=True 将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。适用场景是网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小,输入的通道)是不变的,其实也就是一般情况下都比较适用。反之,如果卷积层的设置一直变化,将会导致程序不停地做优化,反而会耗费更多的时间。

三、随机种子

myseed = 20211024  # set a random seed for reproducibility
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(myseed)
torch.manual_seed(myseed)
if torch.cuda.is_available():torch.cuda.manual_seed_all(myseed)

随机种子、torch.backends.cudnn.benchmark\.deterministic相关推荐

  1. torch.backends.cudnn.benchmark和torch.backends.cudnn.deterministic解读

    torch.backends.cudnn.benchmark 简介:总的来说,大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来 ...

  2. torch.backends.cudnn.benchmark 和torch.backends.cudnn.deterministic

    torch.backends.cudnn.benchmark标志位True or False cuDNN是GPU加速库 在使用GPU的时候,PyTorch会默认使用cuDNN加速,但是,在使用 cuD ...

  3. torch.backends.cudnn.benchmark和cudnn.deterministic

    当使用新的尺度参数的时候,cuDNN 自动从几种算法里面寻找最适合当前配置的高效算法,之后所有相同参数的数据都采用这个算法.但是由于噪声等造成即使在同一个机器也可能会选择不同的算法. 因此方便复现.提 ...

  4. torch.backends.cudnn.benchmark ?!

    大家在训练深度学习模型的时候,经常会使用 GPU 来加速网络的训练.但是说起 torch.backends.cudnn.benchmark 这个 GPU 相关的 flag,可能有人会感到比较陌生.在一 ...

  5. torch.backends.cudnn.benchmark

    参考   torch.backends.cudnn.benchmark ?! - 云+社区 - 腾讯云 大家在训练深度学习模型的时候,经常会使用 GPU 来加速网络的训练.但是说起 torch.bac ...

  6. pytorch之torch.backends.cudnn.benchmark=True——使用 GPU 来加速网络的训练

    文章目录 简介 适用场景 简介 import torch torch.backends.cudnn.enabled = True torch.backend.cudnn.benchmark=True ...

  7. torch.backends.cudnn.benchmark 加速训练

    设置 torch.backends.cudnn.benchmark=True 将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速.适用场景是网络结 ...

  8. 【Pytorch】torch.backends.cudnn.benchmark 作用

    作用 针对你当前的硬件,找到最合适的算法.(注意,很多代码里会有import torch.backends.cudnn as cudann,所以其实torch.backends.cudnn.bench ...

  9. torch.backends.cudnn.benchmark=True 的效果和坑

    系统环境 CUDA 11.1 gtx1070-8g win10 21h1 19043.1266 打开该选项 torch.backends.cudnn.benchmark=True 加快运算速度,但相比 ...

最新文章

  1. 数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!
  2. 在Windows系统上安装Ruby On Rails
  3. 算法效果AB测试中的PV-UV不对称性
  4. cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验
  5. mysql 清理host文件_如何删除mysql 数据库里面的host
  6. DMB DSB ISB 简介
  7. go io.reader 多次读取_Go 经典入门系列 24:Select
  8. 黑马程序员——Java集合基础知识之Map
  9. 学习 Linux_01: 引导程序
  10. mendelay为什么安装不了_你为什么消防验收过不了?消防管道安装错误图集
  11. 端口和进程的关系(详解)
  12. currentTitle的用法
  13. 华人数学家可以“恐怖”到什么程度?
  14. 哈佛MIT联手出品 | 造价低于1美元的机械臂,可承自身重量千倍
  15. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
  16. Hot Swap failed:add method not implemented
  17. 端口扫描 -- Masscan-Gui
  18. 初学STM32F205的库包搭建工程
  19. django官方文档3.0学习笔记 02
  20. 腾讯文档的表格设置行高

热门文章

  1. 如何用Python实现照片马赛克效果?
  2. 运行FAST-Lab的FAST-Dynamic-Vision记录
  3. 学习unity从一个小白到一名游戏开发高手
  4. 台式计算机喇叭啸叫声,话筒系统的啸叫声的原因和处理办法
  5. Spring A.S - SQL引擎使用说明
  6. Linux仿QQ实验报告,Linux QQ测试报告
  7. 哲学在语文写作教学中的作用
  8. 99乘法表用html语言做出来,九九乘法表制作.html
  9. chromedriver下载
  10. “ChatGPT们”的淘金时代