torch numpy seed使用方法

1

import numpy as np
np.random.seed(500)
np.random.rand(5)
array([0.69367953, 0.06171699, 0.6666116 , 0.55920894, 0.08511062])
import torch
torch.manual_seed(500)
torch.rand(5)

为了能够复现数据,我们可以使用seed 来控制生成的随机数。设置seed数据来设定指定的随机数列,每次调用 随机数生成函数 ,就会从随机数列种读取数据,所以重复运行相同的随机数生成函数,得到的值并不相同。

2

torch.Generator().manual_seed(seed) 与直接调用 torch.manual_seed(seed) 的主要区别在于作用域粒度上的不同。

torch.manual_seed(seed):

  • 全局设置:调用 torch.manual_seed(seed) 会影响 PyTorch 中所有后续的随机数生成操作,且影响的是全局的随机数生成器。这意味着,无论是CPU还是GPU上的随机操作,都会使用这个种子生成随机数。
  • 适用于所有随机数生成器:它会影响 PyTorch 中所有使用默认生成器的操作。例如,创建张量时使用 torch.randn() 或其他类似的随机生成函数时,它们都会受到这个种子的影响。

torch.Generator().manual_seed(seed):

  • 局部设置:调用 torch.Generator().manual_seed(seed) 会创建一个新的 torch.Generator 对象,并将种子应用到该对象。这个生成器仅对通过该生成器产生的随机数起作用,而不会影响全局默认的随机数生成器。
  • 可用于多个生成器:通过显式创建和设置 Generator 对象,你可以为不同的操作或任务创建多个独立的随机数生成器,每个生成器可以拥有不同的种子。这在需要对不同的计算操作保持独立的随机数生成时非常有用。

区别总结:

  • 全局 vs 局部

    • torch.manual_seed(seed):影响全局的默认随机数生成器。
    • torch.Generator().manual_seed(seed):创建并影响一个独立的随机数生成器,不会影响全局状态。
  • 多重生成器支持

    • 如果你希望在不同的操作中使用不同的随机数生成器并控制它们的种子,可以使用 torch.Generator().manual_seed(seed)

示例:

# 全局种子设置
torch.manual_seed(42)  # 所有后续操作都会基于种子42生成

# 使用独立的生成器
gen = torch.Generator()
gen.manual_seed(42)  # 这个生成器的随机数会基于种子42,但不会影响全局设置
random_tensor = torch.randn(3, 3, generator=gen)

在这个示例中,gen 是一个独立的随机数生成器,它的行为与全局设置无关,适用于需要多个不同随机生成器的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花椒且喵酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值