python设置了随机种子seed后,结果仍然会变动

问题
深度学习训练时,可以通过seed种子设置保持结果的可复现性,如下所示

def set_seed(my_seed):
    os.environ['PYTHONHASHSEED'] = str(my_seed)
    random.seed(my_seed)
    np.random.seed(my_seed)
    torch.manual_seed(my_seed)
    torch.cuda.manual_seed(my_seed)
    torch.cuda.manual_seed_all(my_seed)
    torch.backends.cudnn.benchmark = False  # This can slow down training
    torch.backends.cudnn.deterministic = True

然而,我设置了上述的随机种子,仍然会无法保证每次的效果都是一致的。

解决
在中文网站搜索了一堆,都只是给出了设置随机种子。后面去谷歌,英文输入“ pytorch set seed fail to reproduce result ”,进入github的讨论
发现是由于DataLoader中的worker_num的问题。通过将其设置为0并且再结合如下的一行代码

torch.backends.cudnn.enabled = False

就可以实验结果保证一致性了。 (注意,上述的两者都需要同时的满足)

pytorch的相关issues

但是这样做会大大降低训练速度,因为num_workers = 0,所以一种更简单的方式是升级pytorch版本。例:torch1.90升级为torch1.11.0

你可能感兴趣的:(python,开发语言)