书店网站开发目的和意义,个人手机版网站建设,浙江品牌设计公司,WordPress网站注册账户文章目录 深度学习训练中的种子设置1. 为什么需要设置随机种子2. 随机种子的设置及使用 深度学习训练中的种子设置
1. 为什么需要设置随机种子
在神经网络训练过程中#xff0c;经常会通过随机的方式对一些数据进行初始化#xff1a;
1、随机权重#xff0c;网络有些部分… 文章目录 深度学习训练中的种子设置1. 为什么需要设置随机种子2. 随机种子的设置及使用 深度学习训练中的种子设置
1. 为什么需要设置随机种子
在神经网络训练过程中经常会通过随机的方式对一些数据进行初始化
1、随机权重网络有些部分的权重没有预训练它的值则是随机初始化的每次随机初始化不同会导致结果不同。 2、随机数据增强一般来讲网络训练会进行数据增强特别是少量数据的情况下数据增强一般会随机变化光照、对比度、扭曲等也会导致结果不同。 3、随机数据读取喂入训练数据的顺序也会影响结果。
…
如果每次的实验都进行随机操作那么实验的结果也会具有随机性即相同的训练数据相同的超参数但是最终的结果可能会相差好几个百分点。
如何解决随机带来的问题呢即使得我们每次实验具有可复现性
在计算机中的随机其实不是真随机都是伪随机通过设置一个随机数种子就能使得每次随机产生的结果都相同。
2. 随机种子的设置及使用
一般训练会用到多个库包含有关random的内容。
在pytorch构建的网络中一般都是使用下面三个库来获得随机数我们需要对三个库都设置随机种子 1、torch库 2、numpy库 3、random库。
通常只会在两个地方使用这些random操作初始化操作和数据加载操作只需要在这两个操作之前对种子进行设置即可。
#---------------------------------------------------#
# 设置种子
#---------------------------------------------------#
def seed_everything(seed11):random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)torch.backends.cudnn.deterministic Truetorch.backends.cudnn.benchmark False
在初始化操作之前使用seed_everything()进行种子设置。
torch.backends.cudnn.deterministicTrue用于保证CUDA 卷积运算的结果确定。 torch.backends.cudnn.benchmarkFalse是用于保证数据变化的情况下减少网络效率的变化。为True的话容易降低网络效率。
Pytorch一般使用Dataloader来加载数据Dataloader一般会使用多worker加载多进程来加载数据此时我们需要使用Dataloader自带的worker_init_fn函数初始化Dataloader启动的多进程这样才能保证多进程数据加载时数据的确定性。
#---------------------------------------------------#
# 设置Dataloader的种子
#---------------------------------------------------#
def worker_init_fn(worker_id, rank, seed):worker_seed rank seedrandom.seed(worker_seed)np.random.seed(worker_seed)torch.manual_seed(worker_seed)小结
通过设置随机数种子利用伪随机使得每次实验具有可复现性设置种子环节在初始化参数之前设置随机数种子在使用Dataloader加载数据时配置worker_seed 参考文章神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一_pytorch seed-CSDN博客