Pytorch笔记01:随机数种子的设置 VS zero

    科技2024-06-15  73

    Pytorch 笔记01

    Pytorch中随机数种子的设置

    ​ 为了模型结果可复现,常常需要为程序设置随机数种子(seed),在使用Pytorch进行模型训练时,有以下几个部分可以设置随机种子。

    1、cudnn

    from torch.backends import cudnn cudnn.benchmark = False cudnn.deterministic = True

    2、Pytorch

    import torch seed = 121 torch.manual_seed(seed) #设置随机数种子 torch.cuda.manual_seed(seed) #设置当前GPU随机数种子 torch.cuda.manual_seed_all(seed) #为所有GPU设置随机数种子

    3、Python & Numpy

    import random import numpy as np seed = 121 random.seed(seed) #为random模块设置seed np.random.seed(seed) #为np.random模块设置seed

    4、 通用seed设置

    import random import numpy as np import torch from torch.backends import cudnn def set_seed(seed): cudnn.benchmark = False cudnn.deterministic = True torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) random.seed(seed) np.random.seed(seed)

    Pytorch中的zero_grad()

    ​ Pytorch中有optimizer.zero_grad()与model.zero_grad(),实际上,当优化器是如下定义时:

    optimizer=optim.Optimizer(net.parameters())

    两者的效果是一致的,原因在于Pytorch中zero_grad函数的定义:

    def zero_grad(self): """Sets gradients of all model parameters to zero.""" for p in self.parameters(): if p.grad is not None: p.grad.data.zero_()

    Reference

    简书:PyTorch设置随机数种子使结果可复现

    : optimizer.zero_grad()和net.zero_grad()区别

    Processed: 0.011, SQL: 8