torch中的随机数种子

简介: 如何在torch生成随机数时,设置随机种子,要求每次调用生成的随机数都一样

------------如何在torch生成随机数时,设置随机种子,要求每次调用生成的随机数都一样


在 PyTorch 中,可以使用 torch.manual_seed(seed) 函数设置随机种子,以确保每次运行代码时生成的随机数都一样。

以下是一个示例代码,展示了如何使用 torch.manual_seed() 函数设置随机种子:


import torch
# 设置随机种子为固定值,这里设为0
torch.manual_seed(0)
# 生成一个随机的张量
x = torch.randn(3, 3)
# 打印生成的随机张量
print(x)

在此示例中,我们使用 torch.randn() 函数生成一个 3x3 的随机张量,同时使用 torch.manual_seed() 函数将随机种子设置为 0。由于随机种子已经固定,因此每次运行代码时生成的随机张量都是一样的。

需要注意的是,在设置了随机种子之后,如果代码中还有其他随机操作,比如使用 torch.rand() 函数生成随机张量,则这些随机操作的结果也会受到随机种子的影响。因此,如果需要在代码中使用多个随机操作,并且需要确保它们的结果每次都一样,就需要在每个随机操作之前都调用 torch.manual_seed() 函数设置相同的随机种子。


-----------------如何再取消随机种子?


要取消 PyTorch 中的随机种子,可以使用 torch.seed() 函数,它可以将随机种子设置为当前时间戳,从而实现取消之前设置的随机种子。

以下是一个示例代码,展示了如何使用 torch.seed() 函数取消之前设置的随机种子:


import torch
# 设置随机种子为固定值,这里设为0
torch.manual_seed(0)
# 生成一个随机的张量
x = torch.randn(3, 3)
# 打印生成的随机张量
print(x)
# 取消随机种子
torch.seed()
# 再次生成一个随机的张量
y = torch.randn(3, 3)
# 打印生成的随机张量
print(y)

在此示例中,我们先使用 torch.manual_seed() 函数将随机种子设置为 0,然后生成一个随机张量并打印它。接着使用 torch.seed() 函数取消之前设置的随机种子,并生成另一个随机张量并打印它。由于我们已经取消了随机种子,因此两次生成的随机张量应该是不同的。

需要注意的是,如果你在代码中多次设置了随机种子,而每次设置的随机种子不同,那么每次调用 torch.seed() 函数取消随机种子时,你可能会得到不同的结果。因此,如果需要取消之前设置的随机种子,应该确保在取消之前只设置了一次随机种子。


---------------上面的随机数种子设置后,结果不一样


import torch 
torch.manual_seed(0)
 x = torch.randn(3, 3) 
y = torch.randn(3, 3) 
print(x,y)

根据你提供的代码,由于使用了两次 torch.randn(3, 3) 函数生成两个不同的随机张量 xy,因此它们的值是不同的,即使使用了相同的随机种子。因此,在此代码中,随机种子的设置不会影响随机张量 xy 的结果。

如果需要使用相同的随机种子生成相同的随机张量,需要将 torch.randn() 函数的调用合并在一起,如下所示:


import torch
# 设置随机种子为固定值,这里设为0
torch.manual_seed(0)
# 生成两个随机的张量
x = torch.randn(3, 3)
y = torch.randn(3, 3)
# 打印生成的随机张量
print(x)
print(y)
# 再次使用相同的随机种子生成两个随机的张量
torch.manual_seed(0)
x = torch.randn(3, 3)
y = torch.randn(3, 3)
# 打印生成的随机张量
print(x)
print(y)

输出

tensor([[ 1.5410, -0.2934, -2.1788],
        [ 0.5684, -1.0845, -1.3986],
        [ 0.4033,  0.8380, -0.7193]])
tensor([[-0.4033, -0.5966,  0.1820],
        [-0.8567,  1.1006, -1.0712],
        [ 0.1227, -0.5663,  0.3731]])
tensor([[ 1.5410, -0.2934, -2.1788],
        [ 0.5684, -1.0845, -1.3986],
        [ 0.4033,  0.8380, -0.7193]])
tensor([[-0.4033, -0.5966,  0.1820],
        [-0.8567,  1.1006, -1.0712],
        [ 0.1227, -0.5663,  0.3731]])


在此示例中,我们先使用 torch.manual_seed() 函数将随机种子设置为 0,然后使用 torch.randn() 函数生成两个随机张量 xy,并打印它们。接着再次使用相同的随机种子生成两个随机张量,并打印它们。由于两次使用了相同的随机种子,因此两次生成的随机张量应该是一样的。


-------------或者


import torch
# 设置随机种子为固定值,这里设为0
torch.manual_seed(0)
# 生成两个随机的张量
x = torch.randn(3, 3)
# 打印生成的随机张量
print(x)
# 再次使用相同的随机种子生成两个随机的张量
torch.manual_seed(0)
y = torch.randn(3, 3)
# 打印生成的随机张量
print(y)

输出

tensor([[ 1.5410, -0.2934, -2.1788],
        [ 0.5684, -1.0845, -1.3986],
        [ 0.4033,  0.8380, -0.7193]])
tensor([[ 1.5410, -0.2934, -2.1788],
        [ 0.5684, -1.0845, -1.3986],
        [ 0.4033,  0.8380, -0.7193]])
相关文章
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
负载均衡 数据可视化 AI芯片
DeepSeek模型MOE结构代码详解
其实在DeepSeek-R1爆火之前,DeepSeek V2在我们行业就已经妇孺皆知了,它独特的MOE结构值得研究一下。这篇文章是基于 @ZOMI酱 的2个视频写的,这2个视频讲的很好,建议大家都学习一下:《MOE终于迎来可视化解读!傻瓜都能看懂MoE核心原理!》和《使用昇腾NPU手撕MoE单机版代码!没想到如此简单!》。
773 5
|
人工智能 编解码 JSON
Qwen2.5-VL:阿里通义千问最新开源视觉语言模型,能够理解超过1小时的长视频
Qwen2.5-VL 是阿里通义千问团队开源的视觉语言模型,具有3B、7B和72B三种不同规模,能够识别常见物体、分析图像中的文本、图表等元素,并具备作为视觉Agent的能力。
9669 18
Qwen2.5-VL:阿里通义千问最新开源视觉语言模型,能够理解超过1小时的长视频
纳维-斯托克斯方程存在性与光滑性的重构封闭证明 · 第八篇
本文在前七篇推导基础上,整合完整变量重构逻辑、危险项吸收机制、拓扑复杂度控制逻辑与Banach-Sobolev空间一致性收敛分析,形成对纳维-斯托克斯方程存在性与光滑性问题的全封闭证明尝试。
471 2
|
机器学习/深度学习 存储 人工智能
Attention优化重大突破!显存减半效率倍增
本文探讨了Transformer中Attention机制的演变与优化。从2017年Transformer提出以来,各种改进如MQA、GQA、MLA等层出不穷,旨在降低计算复杂度和显存消耗,同时保持模型性能。文章首先介绍了Attention的基本原理,通过QKV矩阵运算实现序列建模。接着分析了优化方法:kv caching将计算复杂度从O(n^3)降至O(n^2),但带来显存压力;MQA、GQA等通过减少或压缩K/V降低显存需求;而NSV、MoBA等稀疏化研究进一步缓解长序列下的计算与存储负担,推动大模型向更长上下文扩展。
|
机器学习/深度学习 人工智能 并行计算
【AI系统】Tensor Core 基本原理
本文深入介绍了英伟达GPU中的Tensor Core,一种专为加速深度学习设计的硬件单元。文章从发展历程、卷积计算、混合精度训练及基本原理等方面,详细解析了Tensor Core的工作机制及其在深度学习中的应用,旨在帮助读者全面理解Tensor Core技术。通过具体代码示例,展示了如何在CUDA编程中利用Tensor Core实现高效的矩阵运算,从而加速模型训练和推理过程。
3451 0
|
机器学习/深度学习 算法 Python
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
10734 10
|
存储 JSON 数据格式
Python教程:json中load和loads的区别
【7月更文挑战第17天】在Python的`json`模块中, `load`与`loads`函数均用于JSON至Python对象的转换, 区别在于: - **`loads`**处理JSON格式的**字符串** 其中`data.json`文件内容为`{"name": "Bob", "age": 30}`。 简而言之, `loads`用于字符串, 而`load`用于文件对象。根据数据来源选择合适的方法。
906 5
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】生成模型和判别模型的区别及优缺点
文章讨论了生成模型和判别模型在数据挖掘中的区别、原理、优缺点,并提供了一些常见的模型示例。
693 0

热门文章

最新文章