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
)
torch
.cuda
.manual_seed_all
(seed
)
3、Python & Numpy
import random
import numpy
as np
seed
= 121
random
.seed
(seed
)
np
.random
.seed
(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()区别