Seed_Everything
尽最大程度提高结果的可复现性
def seed_everything(seed):
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
各部分作用:
def seed_everything(seed):
# 1. 设置Python内置的random模块的全局随机种子
random.seed(seed)
# 2. 设置Python的哈希种子,使得哈希函数的行为是可预测的。这在某些使用字典和集合的操作中可能会影响顺序,从而影响结果。
os.environ['PYTHONHASHSEED'] = str(seed)
# 3. 设置Numpy库的全局随机种子
np.random.seed(seed)
# 4. 设置PyTorch库的CPU部分的随机种子
torch.manual_seed(seed)
# 5. 设置PyTorch库的GPU部分的随机种子。如果使用多块GPU进行并行计算,确保所有GPU的随机数生成器都使用相同的种子。
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
# 6. 确保使用确定性算法。这对结果的可复现性非常重要,但可能会影响计算性能。
torch.backends.cudnn.deterministic = True
# 7. 关闭CuDNN的自动优化功能。这可以保证每次运行的计算图和内存分配都是一致的,从而提高结果的可复现性。
torch.backends.cudnn.benchmark = False