设置随机种子以确保结果的可复现性(pytorch、numpy、random、os)

news/2024/7/24 5:50:32 标签: pytorch, numpy, 人工智能, 随机性

在机器学习和深度学习任务中,随机性是一个常见的因素。在某些情况下,我们希望能够获得可复现的结果,以便于调试、复现实验结果或确保结果的一致性。为了实现这一目标,设置随机种子是一种常用的方法。

在本篇博客中,将介绍如何使用Python和一些常用的库来设置随机种子,以确保在相同的种子下生成的随机数序列是一致的。

设置随机种子的方法

def seed_all(seed):
    """
    设置PyTorch的随机种子, 用于生成随机数. 通过设置相同的种子, 可以确保每次运行时生成的随机数序列相同
    """
    torch.manual_seed(seed)

    """
    设置PyTorch在所有可用的CUDA设备上的随机种子. 如果在使用GPU进行计算, 这个设置可以确保在不同的GPU上生成的随机数序列相同
    """
    torch.cuda.manual_seed_all(seed)

    """
    设置PyTorch在当前CUDA设备上的随机种子. 它与上一行代码的作用类似, 但只影响当前设备
    """
    torch.cuda.manual_seed(seed)

    """
    设置NumPy的随机种子, 用于生成随机数. 通过设置相同的种子,可以确保在使用NumPy的随机函数时生成的随机数序列相同
    """
    np.random.seed(seed)
    
    """
    设置Python内置的随机函数的种子. Python的random模块提供了许多随机函数, 包括生成随机数、打乱列表等. 通过设置相同的种子, 可以确保使用这些随机函数时生成的随机数序列相同
    """
    random.seed(seed)
    
    """
    设置Python的哈希种子 (哈希函数被广泛用于数据结构 (如字典和集合) 的实现,以及一些内部操作 (如查找和比较)). 通过设置相同的种子, 可以确保在不同的运行中生成的哈希结果相同
    """
    os.environ["PYTHONHASHSEED"] = str(seed)
    
    """
    该设置确保每次运行代码时, cuDNN的计算结果是确定性的, 即相同的输入会产生相同的输出, 这是通过禁用一些非确定性的算法来实现的, 例如在卷积操作中使用的算法. 这样做可以保证模型的训练和推理在相同的硬件和软件环境下是可复现的, 即每次运行代码时的结果都相同. 但是, 这可能会导致一些性能上的损失, 因为禁用了一些优化的非确定性算法
    """
    torch.backends.cudnn.deterministic = True
    
    """
    该设置禁用了cuDNN的自动优化过程. 当它被设置为False时, PyTorch不会在每次运行时重新寻找最优的算法配置, 而是使用固定的算法配置. 这样做可以确保每次运行代码时的性能是一致的, 但可能会导致一些性能上的损失
    """
    torch.backends.cudnn.benchmark = False

http://www.niftyadmin.cn/n/5299564.html

相关文章

解决Gradle打War包时不能把所依赖的jar包打进来的问题,Springboot项目的Gradle构建问题

启动War包报错: Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.m…

elasticsearch-curator: es索引生命周期(关闭、删除索引)

1,下载安装 rpm包下载安装 # 防止安装rpm包报错:error: [upel]: elasticsearch-curator NOKEY ; # error: [upel]: elasticsearch-curator signature check fail rpm --import https://artifacts.elastic.co/GPG-KEY-ela…

网络安全—PKI公钥基础设施

文章目录 前提知识散列函数非对称加密数字签名 PKI受信任的人RA注册CA颁发IKE数字签名认证(交换证书)密钥管理 前提知识 散列函数 散列也可以叫哈希函数,MD5、SHA-1、SHA-2、、(不管叫啥,都记得是同一个东西就行&…

分布式系统架构设计之分布式数据存储的扩展方式、主从复制以及分布式一致性

三、水平扩展和垂直扩展 在分布式系统中,数据存储的扩展是为了适应业务的增长和提高系统的性能。分为水平扩展和垂直扩展两种方式,这两种方式在架构设计和应用场景上有着不同的优势和局限性。 水平扩展 水平扩展是通过增加节点或服务器的数量来扩大整…

【基础八股文】html css js

1、css盒模型 在html页面中说有元素都可以看成一个盒子, 组成:盒子的组成内容content,内边距padding,边框border,外边距margin, 类型:标准盒模型:marginborderpaddingcontent IE盒…

贵州省文化旅游科技有限公司:5G赋能,打造智慧文旅数字再现精品工程

贵州是中央红军长征途中活动时间最长、活动范围最广、发生重大事件最多的省份,长征留下的遗址遗迹和历史故事形成了丰富的红色资源,为贵州留下了深厚的红色文化。为赓续红色血脉,传承红色基因,贵州依托5G赋能,打造了全…

大模型提效105篇必读论文和代码汇总,涵盖预训练、注意力、微调等7个方向

大型语言模型(LLMs)在NLP领域中具有显著的优势,它们在语言理解和生成方面表现出了强大的能力,甚至可以进行复杂的推理任务。这些能力能让大模型在许多领域都有广泛的应用前景,比如文本生成、对话系统、机器翻译、情感分…

rime中州韵 help lua Translator

lua 是 Rime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 h…