在使用 Python 进行科学技术、深度学习模型训练与推断时,为了结果可复现,我们尝尝需要设置固定的随机种子,而不是采用非自定义的随机种子。本篇介绍对常用的包(numpy, random, torch)设置随机种子,保证计算结果可复现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import random

import numpy as np
import torch

def setup_seed(seed=33):
"""
设置随机种子函数,采用固定的随机种子使得结果可复现
seed:种子值,int
"""
torch.manual_seed(seed) # 为CPU设置随机种子
torch.cuda.manual_seed_all(seed) # 为所有GPU设置随机种子
np.random.seed(seed) # numpy 设置随机种子
random.seed(seed) # random 设置随机种子
# torch.backends.cudnn.benchmark = False # cudnn中对卷积操作进行了优化,牺牲了精度来换取计算效率。对精度影响不大,仅仅是小数点后几位的差别,微小差异容忍可注释
torch.backends.cudnn.deterministic = True


# 只需要在代码运行入口添加如下代码,设置随机数种子
setup_seed(33)