解决训练模型每次结果不一样

1.首先是初始化的时候,给权重矩阵 (以及 )的初始值不一样。
2.如果我们固定初始值,结果仍有可能不一样,原因在于大部分算法训练时使用的是mini-batch SGD,也就是每次更新数据是基于一个batch里的样本。这次,许多算法会在每轮遍历时shuffle一遍数据集,那么得到的每个batch的数据也会不一样,这会导致学到的参数有细微不同。
3.进一步的,如果我们固定好每个batch的样本(或者使用批梯度下降,即每次都把全量训练集作为一个batch),那么训练出来的模型仍有可能有差异。这可能是收敛条件的判定不同,有的算法会固定epoch数,有的则会使用early-stop。
以上的讨论都是基于通用的神经网络模型进行的,即所有神经网络会具有的特性如此。此外,还有一些trick也可能会导致同一超参训练出的模型准确率不同,例如:使用随机的dropout。需要注意的是,一个良好的,收敛的神经网络架构在同一套超参下训练出的模型,即使有不一样,但是其准确率相差不应该很大。如果出现差距甚远的情况,请检测一下是否实现有bug或者本身架构有问题,以保证算法的鲁棒性。

我的算法是因为引入了随机数,因此固定一个随机种子

 random_seed = 1388
   random.seed(random_seed)
   np.random.seed(random_seed)
   torch.manual_seed(random_seed)
   torch.cuda.manual_seed_all(random_seed)
   #cudnn.benchmark = True       
   torch.backends.cudnn.deterministic = True
   torch.backends.cudnn.benchmark = False

你可能感兴趣的:(解决训练模型每次结果不一样)