torch中的随机数种子

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

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

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

python 复制代码
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() 函数取消之前设置的随机种子:

python 复制代码
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() 函数取消随机种子时,你可能会得到不同的结果。因此,如果需要取消之前设置的随机种子,应该确保在取消之前只设置了一次随机种子。

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

python 复制代码
import torch 
torch.manual_seed(0)
x = torch.randn(3, 3) 
y = torch.randn(3, 3) 
print(x,y)

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

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

python 复制代码
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)

输出

python 复制代码
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() 函数生成两个随机张量 x 和 y,并打印它们。接着再次使用相同的随机种子生成两个随机张量,并打印它们。由于两次使用了相同的随机种子,因此两次生成的随机张量应该是一样的。

或者:

python 复制代码
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)

输出

python 复制代码
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]])
相关推荐
大鹏的NLP博客14 小时前
深度学习模型PyTorch与ONNX数值一致性校验通用技术报告
人工智能·pytorch·深度学习·onnx
FriendshipT15 小时前
Ultralytics:解读BNContrastiveHead模块
人工智能·pytorch·python·深度学习·目标检测
程序员羽痕15 小时前
基于深度学习的眼疾识别系统
人工智能·pytorch·深度学习·分类·django
pokemen邪12 天前
PyTorch KernelAgent 源码解读 ---(6)--- Composer
人工智能·pytorch·composer
FriendshipT3 天前
Ultralytics:解读SPPF模块
人工智能·pytorch·python·深度学习·目标检测
不负信仰3 天前
PyTorch KernelAgent 源码解读 ---(5)--- Dispatcher
人工智能·pytorch·python
OpenApi.cc3 天前
猫狗分类模型 GPU版
pytorch·深度学习·分类
拥抱太阳06163 天前
HarmonyOS 应用开发《掌上英语》第2篇:ArkTS 模块化开发:Index.ets 统一导出模式深度解析
pytorch·ubuntu·harmonyos
拥抱太阳06163 天前
HarmonyOS 应用开发《掌上英语》第5篇:依赖注入与全局状态:AppStorageV2 实战HarmonyOS 应用开发《掌上英语》第1篇
pytorch·华为·harmonyos
无糖冰可乐213 天前
安装wsl2,并链接Windows上的vscode运行项目
pytorch·vscode·python·pip