pytorch随机数种子设置
时间: 2025-01-13 22:02:10 浏览: 60
### 如何在 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]。
阅读全文
相关推荐



















