开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
记录在nlp处理时python的代码知识。
写在最前面:为什么要设置固定的随机种子,因为随机种子和神经网络训练没有直接关系,随机种子的作用就是产生权重为初始条件的随机数。神经网络效果的好坏直接取决于学习率和迭代次数。
一.random.seed(x)
- random.seed()是用来生成随机数的函数。
- random.seed(x)中的参数可以为任意数字
我们都清楚random的用法,是生成随机数,每调用一次生成一次随机数。但seed有点特殊,x的参数能把随机数固定下来。里面没有参数x的话,就不会发挥到把随机数固定下来的作用。
举个例子:
import random
# 随机数不一样
print('随机数1:',random.random())
print('随机数2:',random.random())
# 随机数一样
random.seed(1)
print('随机数3:',random.random())
random.seed(1)
print('随机数4:',random.random())
random.seed(2)
print('随机数5:',random.random())
结果如下:
随机数1: 0.7643602170615428
随机数2: 0.31630323818329664
随机数3: 0.13436424411240122
随机数4: 0.13436424411240122
随机数5: 0.9560342718892494
二.torch
1.torch.manual_seed(seed)
官方文档:设置 (CPU) 生成随机数的种子,并返回一个torch.Generator对象
通俗解释:一旦设置了这个固定的种子,后面依次生成的随机数其实都是固定的,只有每次启动程序时才不一样,类似一的random.seed()
2.torch.cuda.manual_seed(seed)
设置当前GPU的随机数生成种子
3.torch.backends.cudnn.deterministic
cudnn是GPU加速库
但是在使用GPU的时候,PyTorch会默认使用cuDNN加速,但是,在使用cudnn的时候torch.backends.cudnn.benchmark模式是为False
在这里设置这个flag为True,我们就可以在 PyTorch 中对模型里的卷积层进行预先的优化,也就是在每一个卷积层中测试 cuDNN 提供的所有卷积实现算法,然后选择最快的那个。这样在模型启动的时候,只要额外多花一点点预处理时间,就可以较大幅度地减少训练时间。