Pytorch随机种子详解

Pytorch随机数生成和获取详解

pytorch的random模块是支持设置和获取随机种子的,主要的方法为torch.random.manual_seed(),这个方法是用于设置种子的,参数为种子的值,获取种子的方法为torch.random.initial_seed(),返回种子的值。

设置随机种子的注意点有两个:

1.torch.random.manual_seed()设置了随机种子后,随机数会按同一种规则发散生成。

2.torch.random.manual_seed()设置了随机种子,同种初始化函数,在cpu和gpu上初始化的张量可能是不同的,这是由于cpu和gpu的随机数生成逻辑是不同的

import torch

torch.random.manual_seed(100)
data1 = torch.randn(2, 2)
print(data1)
data2 = torch.randint(0, 10, (2, 2))
print(data2)
print(torch.rand(2, 2))
print(torch.random.initial_seed())

torch.random.manual_seed(100)
data3 = torch.randn(2, 2)
print(data3)
data4 = torch.randint(0, 10, (2, 2))
print(data4)
print(torch.rand(2, 2))
print(torch.random.initial_seed())

# tensor([[ 0.3607, -0.2859],
#         [-0.3938,  0.2429]])
# tensor([[8, 0],
#         [4, 3]])
# tensor([[0.7118, 0.7876],
#         [0.4183, 0.9014]])
# 100
# tensor([[ 0.
### 如何在 PyTorch 中正确设置随机种子 为了确保实验的可复现性,在 PyTorch 中需要全面考虑并设定各个层面的随机种子。这不仅限于 PyTorch 自身,还包括 Python 和 Numpy 的环境配置。 #### 设置全局随机种子 通过 `torch.manual_seed(seed)` 可以为 CPU 上的操作设置固定的随机种子[^2]。如果程序运行在 GPU 上,则还需要调用 `torch.cuda.manual_seed_all(seed)` 来为所有的 GPU 设备设置相同的随机种子[^4]。 ```python import torch seed = 42 torch.manual_seed(seed) if torch.cuda.is_available(): torch.cuda.manual_seed_all(seed) ``` #### 配置其他依赖库的随机行为 除了 PyTorch 外部包如 NumPy 或者 Python 内建模块也需要同步设置相应的随机种子来消除不确定性因素: ```python import numpy as np import random np.random.seed(seed) random.seed(seed) ``` #### 控制 DataLoader 行为 当使用 `DataLoader` 进行数据加载时,默认情况下它会对输入数据进行 shuffle 操作,因此应当禁用此功能或将 worker_init_fn 参数指定给定函数以控制子进程内的随机化过程[^1]: ```python from torch.utils.data import DataLoader def seed_worker(worker_id): worker_seed = torch.initial_seed() % 2**32 np.random.seed(worker_seed) random.seed(worker_seed) dataloader_args = { 'batch_size': batch_size, 'shuffle': False, # or True with fixed order via sampler 'num_workers': num_workers, 'worker_init_fn': seed_worker } train_loader = DataLoader(dataset=train_dataset, **dataloader_args) ``` 以上措施可以有效减少由于各种随机源带来的不可预测变化,从而使得同一套代码能够在不同环境中得到几乎完全一致的结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值