1. 理解torch.manual_seed()的核心作用
在深度学习和科学计算领域,随机性无处不在却又需要严格控制。torch.manual_seed()就是PyTorch框架中管理这种随机性的关键工具。简单来说,这个函数为PyTorch的所有随机数生成器设置了一个确定的起点,使得每次运行程序时产生的随机序列完全相同。
注意:设置随机种子不会消除随机性,而是让随机过程变得可预测和可重复。这在以下场景中尤为重要:
- 模型训练过程的复现
- 实验结果的验证
- 教学演示的稳定性
- 调试过程中的问题定位
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 受影响的PyTorch随机操作详解
2.1 基础随机数生成函数
PyTorch提供了一系列随机数生成函数,这些函数的行为都会受到torch.manual_seed()的控制:
python复制torch.manual_seed(42)
# 均匀分布随机数 [0,1)
print(torch.rand(3)) # 输出固定为tensor([0.8823, 0.9150, 0.3829])
# 标准正态分布
print(torch.randn(3)) # 输出固定为tensor([-0.9374, 1.8467, 0.5741])
# 随机排列
print(torch.randperm(5)) # 输出固定为tensor([3, 0, 4, 1, 2])
这些函数的"随机"结果实际上是由伪随机数生成器(Pseudo-Random Number Generator, PRNG)产生的。设置种子就是初始化这个生成器的内部状态。
2.2 神经网络参数初始化
神经网络的权重初始化对训练效果有重要影响,而初始化过程本质上是随机过程:
python复制torch.manual_seed(42)
# 线性层的权重初始化
linear = torch.nn.Linear(10, 2)
print(linear.weight[0]) # 每次运行都输出相同的tensor
# 卷积层的核初始化
conv = torch.nn.Conv2d(3, 16, 3)
print(conv.weight[0,0]) # 固定输出
PyTorch默认使用Kaiming初始化(针对ReLU激活函数优化)或Xavier初始化,这些方法都依赖于随机数生成器。
2.3 数据加载与采样
数据处理的随机性也需要控制:
python复制from torch.utils.data import DataLoader, TensorDataset
torch.manual_seed(42)
dataset = TensorDataset(torch.arange(10))
dataloader = DataLoad
