def seed_everything(seed=1234):
random.seed(seed)
np.random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
这段代码用于设置多个库的随机种子,以确保可重复性。在进行机器学习,特别是深度学习模型训练时,设置随机种子有助于确保每次运行时结果一致。
-
random.seed(seed)
:
设置 Python 内置random
模块的随机种子,该模块用于生成随机数,如洗牌、采样等操作。这样可以确保使用该模块进行的随机操作是确定性的。 -
np.random.seed(seed)
:
设置 NumPy 的随机数生成器种子。NumPy 中的许多操作(如np.random.rand
、np.random.randn
、np.random.randint
等)都依赖于随机数生成器,因此设置该种子能确保这些操作在每次运行时产生相同的结果。 -
os.environ['PYTHONHASHSEED'] = str(seed)
:
设置 Python 哈希值的种子。默认情况下,Python 中的哈希值(如字典的键)在不同的会话或 Python 运行中可能会变化,这会导致非重复性。设置此环境变量可以强制 Python 在对象(如字典)中使用固定的哈希种子。 -
torch.manual_seed(seed)
:
设置 PyTorch CPU 随机数生成器的种子。这会影响所有涉及随机数生成的操作,如初始化模型权重或数据增强等。 -
torch.cuda.manual_seed(seed)
:
设置 PyTorch CUDA(GPU)随机数生成器的种子。如果使用 GPU,这行代码确保 GPU 上的操作也会有确定的随机数生成器。 -
torch.backends.cudnn.deterministic = True
:
设置 cuDNN(一个针对 NVIDIA GPU 优化的深度学习库)使用确定性算法。当设置为True
时,cuDNN 会确保像卷积操作这样的运算是可重复的。然而,确定性算法可能比非确定性算法效率较低,因此这可能会导致一些操作速度变慢。