[PyTorch] 设置随机种子
在使用模型进行训练的时候,通常为了保证模型的可复现性,会设置固定随机种子。参考代码:# fix random seeddef same_seeds(seed):torch.manual_seed(seed)# 固定随机种子(CPU)if torch.cuda.is_available():# 固定随机种子(GPU)torch.cuda.manual_seed(seed)# 为当前GPU设置torc
·
在使用模型进行训练的时候,通常为了保证模型的可复现性,会设置固定随机种子。
参考代码:
# fix random seed
def same_seeds(seed):
torch.manual_seed(seed) # 固定随机种子(CPU)
if torch.cuda.is_available(): # 固定随机种子(GPU)
torch.cuda.manual_seed(seed) # 为当前GPU设置
torch.cuda.manual_seed_all(seed) # 为所有GPU设置
np.random.seed(seed) # 保证后续使用random函数时,产生固定的随机数
torch.backends.cudnn.benchmark = False # GPU、网络结构固定,可设置为True
torch.backends.cudnn.deterministic = True # 固定网络结构
- torch.manual_seed()
- torch.cuda.manual_seed()
- torch.cuda.manual_seed_all()
- np.random.seed()
- torch.backends.cudnn.benchmark
- torch.backends.cudnn.deterministic
例如,由于上述np.random.seed(seed)
已经设置了固定的随机种子。
a = np.random.randn(3)
b = np.random.randn(3)
上述a、b的结果相同。
torch.backends.cudnn.benchmark
是用于固定网络结构的模型优化,用于提高模型的效率,在模型刚开始训练的时候会花费一些时间,选择模型最适合的算法,因此适合于在GPU下使用,且是固定的网络结构,否则反复搜索反而花费更多的时间,因此GPU可用时再设置为Ture(默认为False)
if args.use_gpu and torch.cuda.is_available():
device = torch.device('cuda')
torch.backends.cudnn.benchmark = True
else:
device = torch.device('cpu')
torch.backends.cudnn.deterministic
设置固定的网络结构。固定了随机输入之后,再固定网络结构,保证模型每次运行都能得到相同的结果,保证模型的可复现性。
参考:
- torch.manual_seed(1)是干嘛用的?:https://www.zhihu.com/question/288350769
- np.random.seed()函数:https://zhuanlan.zhihu.com/p/266472620
- torch.backends.cudnn.benchmark ?!:https://zhuanlan.zhihu.com/p/73711222
- 【pytorch】torch.backends.cudnn.deterministic:https://blog.csdn.net/weixin_41990278/article/details/106268969
更多推荐
已为社区贡献5条内容
所有评论(0)