每次训练结果不一致的原因:

神经网络特意用随机性来保证,能通过有效学习得到问题的近似函数。采用随机性的原因是:用它的机器学习算法,要比不用它的效果更好。

在神经网络中,最常见的随机性包含以下几个地方:

  • 初始化的随机性,比如权值
  • 正则化的随机性,比如dropout
  • 层的随机性,比如词嵌入
  • 最优化的随机性,比如随机优化

解决方案:设置随机数字生成器的种子

1)设置 Torch 的随机种子为固定值,可以保证每次运行网络的时候相同输入的输出是固定的

SEED = 42
torch.manual_seed(SEED)

2)设置这个 flag 为True,每次返回的卷积算法将是确定的

torch.backends.cudnn.deterministic = True

3)设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题

torch.backends.cudnn.benchmark = False

 把该设置代码放在文件的开头处即可

SEED = 42
torch.manual_seed(SEED)
torch.backends.cudnn.deterministic = True 
torch.backends.cudnn.benchmark = False

 

概率神经网络的创新点 神经网络的随机性_概率神经网络的创新点