先看代码:
# 设置 cpu 和 gpu 两种环境中的随机种子
base_seed = 1337
torch.manual_seed(base_seed)
torch.cuda.manual_seed(base_seed)
-
设置基础随机种子:
base_seed = 1337
- 这行代码定义了一个变量
base_seed
,并将其值设置为 1337。这个值将作为后续随机种子的基准。
- 这行代码定义了一个变量
-
设置 PyTorch 的随机种子:
torch.manual_seed(base_seed)
torch.manual_seed()
是 PyTorch 中用于设置全局随机种子的函数。通过设置随机种子,可以确保在训练过程中,所有基于随机数的操作(如权重初始化、数据随机采样等)都能产生相同的随机数序列,从而保证训练结果的可重复性。- 这里使用
base_seed
作为随机种子,确保每次运行代码时,PyTorch 的随机数生成器都从相同的状态开始。
-
设置 CUDA 的随机种子:
torch.cuda.manual_seed(base_seed)
torch.cuda.manual_seed()
是 PyTorch 中用于设置 CUDA 设备上的随机种子的函数。与torch.manual_seed()
类似,它确保在涉及 GPU 的操作中,随机数的生成也是可重复的。- 由于深度学习训练通常在 GPU 上进行,因此设置 CUDA 的随机种子是确保训练过程可重复性的重要步骤。
总结
通过设置随机种子,确保深度学习模型在训练过程中的随机操作是可重复的。这对于实验的可重复性和调试非常重要。具体来说:
base_seed
定义了随机种子的值。torch.manual_seed()
设置了 PyTorch 的全局随机种子。torch.cuda.manual_seed()
设置了 CUDA 设备上的随机种子。
通过设置随机数种子,可以确保每次运行代码时,模型的初始化和训练过程都基于相同的随机数序列,从而得到一致的结果。