深度学习网络模型中初始的权值参数通常都是初始化成随机数,而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感。为了能够完全复现作者的开源深度学习代码,随机种子的选择能够减少一定程度上,算法结果的随机性,也就是更接近于原始作者的结果,即产生随机种子意味着每次运行实验,产生的随机数都是相同的。为确保论文可复现,可采用以下方法进行固定随机种子。
有需求的朋友可以将以下代码插入至train.py下:
def seed_torch(seed=0):
seed=0
# torch.backends.cudnn.enabled = True # pytorch 使用CUDANN 加速,即使用GPU加速
torch.backends.cudnn.benchmark = False # cuDNN使用的非确定性算法自动寻找最适合当前配置的高效算法,设置为False 则每次的算法一致
torch.backends.cudnn.deterministic = True # 设置每次返回的卷积算法是一致的
torch.manual_seed(seed) # 为当前CPU 设置随机种子
torch.cuda.manual_seed(seed) # 为当前的GPU 设置随机种子
torch.cuda.manual_seed_all(seed) # 当使用多块GPU 时,均设置随机种子
np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)