Pytorch固定随机数种子的方法小结
引言
在对神经网络模型进行训练时,有时候会存在对训练过程进行复现的需求。然而,每次运行时 Pytorch、Numpy 中的随机性将使得该目的变得困难重重。在程序运行前固定所有随机数的种子有望解决这一问题。基于此,本文记录了 Pytorch 中的固定随机数种子的方法。
在使用 Pytorch 对模型进行训练时,通常涉及到随机数的模块包括:Python、Pytorch、Numpy、Cudnn。因此,在开始训练前,需要针对这些涉及随机数的模块进行随机数种子的固定。
1. Python
Python 本身涉及到的随机性主要是 Python 自带的 random 库随机化和 Hash 随机化问题,需要通过 os
库对其进行限制:
import os, random random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed)
2. Numpy
在使用 Numpy 库取随机数时,需要对其随机数种子进行限制:
import numpy as np np.random.seed(seed)
3. Pytorch
当 Pytorch 使用 CPU 进行运算时,需要设定 CPU 支撑下的 Pytorch 随机数种子:
import torch torch.manual_seed(seed)
当 Pytorch 使用 GPU 进行运算时,需要设定 GPU 支撑下的 Pytorch 随机数种子:
import torch torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) # 使用多 GPU 时使用
需要特别注意的是:目前很多博客和知乎回答提出 torch.cuda.manual_seed(seed) 和 torch.cuda.manual_seed_all(seed) 具有相同的作用。这个结论需要注意 Pytorch 版本。在笔者所用的 Pytorch 2.1 版本下,这两个函数的作用完全不同。参考官方文档:torch.cuda.manual_seed 和 torch.cuda.manual_seed_all(seed)
当 Pytorch 使用 Cudnn 进行加速运算时,还需要限制 Cudnn 在加速过程中涉及到的随机策略:
import torch torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False
总结
基于上述库的固定随机数方法总结为:
def set_random_seed(seed: int) -> None: random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True seed = 114514 set_torch_seed(seed)
如果在实践中还调用了其他涉及随机性的第三方库,则需要根据上述思路对该固定随机数方法进行动态补充。
以上就是Pytorch固定随机数种子的方法小结的详细内容,更多关于Pytorch固定随机数种子的资料请关注脚本之家其它相关文章!
相关文章
Python使用matplotlib给柱状图添加数据标签bar_label()
这篇文章主要介绍了Python使用matplotlib给柱状图添加数据标签bar_label(),记录如何用使用matplotlib给柱状图添加数据标签,是以matplotlib.pyplot.bar_label()为例,需要的朋友可以参考一下2022-03-03Tensorflow 利用tf.contrib.learn建立输入函数的方法
这篇文章主要介绍了Tensorflow 利用tf.contrib.learn建立输入函数的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-02-02Django的HttpRequest和HttpResponse对象详解
这篇文章主要介绍了Django的HttpRequest和HttpResponse对象,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下2018-01-01Python 使用PyQt5 完成选择文件或目录的对话框方法
今天小编就为大家分享一篇Python 使用PyQt5 完成选择文件或目录的对话框方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-06-06
最新评论