PyTorch的可重复性问题【设置随机种子】

由于深度学习模型训练中的随机性,相同代码多次运行可能得到不同结果。为确保可重复性,需关注CUDNN、PyTorch、Python/Numpy以及Dataloader的随机种子设置。在CUDNN中,可选择设置deterministic以牺牲效率换精度。PyTorch中,需设置随机种子。Python和Numpy的随机数生成器同样需要设定。Dataloader的多线程可能导致结果差异,固定num_workers并使用worker_init_fn定制线程种子能帮助复现实验。
摘要由CSDN通过智能技术生成

由于在模型训练的过程中存在大量的随机操作,使得对于同一份代码,重复运行后得到的结果不一致。因此,为了得到可重复的实验结果,我们需要对随机数生成器设置一个固定的种子。

def seed_everything(seed=1029):
    '''
    设置整个开发环境的seed
    :param seed:
    :param device:
    :return:
    '''
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好!你提到了一些重要的设置,这些设置可以帮助确保代码的结果在不同运行中是可重复的。下面是对每个设置的详细解释: 1. `torch.cuda.manual_seed_all(seed)`: 这个函数用于设置 PyTorch 所有 CUDA 设备的随机种子。通过调用 `torch.cuda.manual_seed_all(seed)`,可以确保在相同的种子下,每次运行代码时,在所有 CUDA 设备上产生的随机数序列都是一致的。 2. `np.random.seed(seed)`: 这个函数用于设置 NumPy 的随机种子。NumPy 是一个常用的科学计算库,很多 PyTorch 的功能和操作都与 NumPy 密切相关。通过设置 NumPy 的随机种子,可以确保在相同的种子下,每次运行代码时使用的 NumPy 随机数序列都是一致的。 3. `random.seed(seed)`: 这个函数用于设置 Python 内置的随机种子Python 内置的随机模块 `random` 提供了一些随机数生成函数。通过设置 Python 内置的随机种子,可以确保在相同的种子下,每次运行代码时使用的 Python 内置随机数序列都是一致的。 4. `torch.backends.cudnn.benchmark = False`: 这个设置用于禁用 PyTorch 自动寻找最快的卷积实现。默认情况下,PyTorch 会在运行时根据硬件和输入数据的大小自动选择最适合的卷积算法,以提高性能。然而,在需要结果可重复性的场景下,禁用自动寻找最快卷积实现可以确保每次运行代码时使用相同的卷积算法,从而产生一致的结果。 5. `torch.backends.cudnn.deterministic = True`: 这个设置用于确保每次运行代码时,使用相同的输入数据和参数配置时,CuDNN(CUDA 的深度神经网络库)的计算结果是一致的。CuDNN 使用一些非确定性算法来加速计算,但这可能会导致结果的微小差异。通过将 `torch.backends.cudnn.deterministic` 设置为 `True`,可以禁用这些非确定性算法,从而确保每次运行时都得到相同的结果。 6. `torch.backends.cudnn.enabled = True`: 这个设置用于启用 CuDNN。CuDNN 是 NVIDIA 提供的针对深度神经网络的加速库,可以提高深度学习模型在 GPU 上的计算性能。通过将 `torch.backends.cudnn.enabled` 设置为 `True`,可以确保使用 CuDNN 加速。 这些设置可以在代码中根据需要进行组合和调整,以满足结果可重复性和性能需求之间的权衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值