如何使得pytorch的代码可以复现

最近做实验,发现不管怎么设置种子,就是没法复现代码的结果,在网上搜了一大堆东西,各种试了,最终发现下面这串代码可以使得pytorch的代码可以复现

seed = 43  # 宇宙答案
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.benchmark = False
torch.backends.cudnn.deterministic = True

其实种子的选择可以参考这个网站 https://www.zhihu.com/question/427088601/answer/2555391926 (开个玩笑哈哈)

这个要在实验开始之前设置,不然没效果

正经的解释一下:

  1. os.environ[‘PYTHONHASHSEED’] = str(seed)是为了禁止hash随机化,使得实验可复现
  2. torch.cuda.manual_seed_all(seed) 如果实验多GPU那么这行代码有效,否则可以忽视

你可能感兴趣的:(pytorch,pytorch,深度学习,人工智能)