zl程序教程

您现在的位置是:首页 >  其他

当前栏目

pytorch用同一个随机种子,使每次训练结果相同,随机种子设置为3407会出现好的效果

训练PyTorch 设置 出现 效果 结果 随机 相同
2023-09-14 09:14:43 时间

设置随机种子:

在使用PyTorch时,如果希望通过设置随机数种子,在gpu或cpu上固定每一次的训练结果,则需要在程序执行的开始处添加以下代码:

import torch
import numpy as np
import random
import os

def setup_seed(seed=3407):
    random.seed(seed)   # Python的随机性
    os.environ['PYTHONHASHSEED'] = str(seed)    # 设置Python哈希种子,为了禁止hash随机化,使得实验可复现
    np.random.seed(seed)   # numpy的随机性
    torch.manual_seed(seed)   # torch的CPU随机性,为CPU设置随机种子
    torch.cuda.manual_seed(seed)   # torch的GPU随机性,为当前GPU设置随机种子
    torch.cuda.manual_seed_all(seed)  # if you are using multi-GPU.   torch的GPU随机性,为所有GPU设置随机种子
    torch.backends.cudnn.benchmark = False   # if benchmark=True, deterministic will be False
    torch.backends.cudnn.deterministic = True   # 选择确定性算法

# 设置随机数种子
setup_seed(seed = 3407)
# 预处理数据以及训练模型
# ...
# ...

torch.backends.cudnn.benchmark设置为True时,会让CUDNN根据当前硬件情况自动寻找最合适的卷积实现方式,从而减少卷积计算时间;而设置为False时,则会禁用这个自动调优功能,从而更保证卷积计算的结果的可复现性。【torch.backends.cudnn.benchmark设置为True时可能会对模型训练速度带来一定的提升,但并不能保证训练精度提升】

torch.backends.cudnn.deterministic设置为True时,会让CUDNN使用确定性算法来计算卷积操作,从而保证相同输入下卷积计算结果的一致性;而设置为False则允许CUDNN使用非确定性算法计算卷积操作,从而可能得到更高的计算速度。


为什么要将随机种子设置为3407?看以下链接

https://mp.weixin.qq.com/s/bxspzdoHQlAtKeKJqcP_FA