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_()