用深度学习每次得到的结果都不一样的解决方案

神经网络算法利用了随机性,比如初始化随机权重,因此用同样的数据训练同一个网络会得到不同的结果。

初学者可能会有些懵圈,因为算法表现得不太稳定。但实际上它们就是这么设计的。随机初始化可以让网络通过学习,得到一个所学函数的很好的近似。

然而, 有时候用同样的数据训练同一个网络,你需要每次都得到完全相同的结果。例如在教学和产品上。

在这个教程中,你会学到怎样设置随机数生成器,才能每次用同样的数据训练同一网络时,都能得到同样的结果。

我们开始。

教程概览

这个教程分为六部分:

为啥我每次得到的结果都不一样?不同结果的演示解决方法用Theano 后端设置随机数种子用TensorFlow 后端设置随机数种子得到的结果还是不同,咋办?

运行环境

该教程需要你安装了Python SciPy。你能用Python2或3来演示这个例子需要你安装Keras (v2.0.3+),后台为TensorFlow (v1.1.0+)或Theano (v0.9+)还需要你安装了scikit-learn,Pandas,NumPy以及Matplotlib

如果在Python环境的设置方面需要帮助,请看下面这个帖子:

How to Setup a Python Environment for Machine Learning and Deep Learning with Anaconda

为啥我每次得到的结果都不一样?

我发现这对神经网络和深度学习的初学者而言是个常见问题。

这种误解可能出于以下问题:

我如何得到稳定的结果?我如何得到可重复的结果我应该如何设置种子点

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

在神经网络中,最常见的利用随机性的方式是网络权值的随机初始化,尽管在其他地方也能利用随机性,这有一个简短的清单:

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

这些甚至更多的随机性来源意味着,当你对同一数据运行同一个神经网络算法时,注定得到不同的结果。

想了解更多关于随机算法的原委,参考下面的帖子

Embrace Randomness in Machine Learning

你可能感兴趣的:(深度学习,神经网络,python)