我使用openCV的ANN进行图像分类。我有每个图像的特征向量,我训练这些向量
CvANN_MLP.train()
方法。
我的问题是为什么,我总是在相同的数据上获得不同的网络设置。 例如,如果我在循环三次中执行训练过程和预测程序(相同的数据,相同的功能,相同的网络设置)。我将获得三种不同的网络配置和三种不同的输出(例如完全不同的精确率,例如60%,70%,90%)。
我认为结果网络应该在具有相同设置的相同数据上每次都相同,但它不是:/。任何想法为什么?
我在网上发现“偏见”值有可能影响,但我找不到如何更改bias
值。
如果您有任何想法或相关链接,请告诉我。
答案 0 :(得分:0)
它取决于算法和初始化,从我所知道的典型前馈NN和BackPropagation与梯度下降算法:
此类NN的典型训练算法是随机初始化NN的权重(起始点),NN本身具有许多局部优化,因此您可以找到许多不同的次优解,如果从不同的初始化开始,您可能会发现另一种方案。这就是为什么最终的解决方案很大程度上取决于起点。
因此,如果您保持所有参数和初始化相同,您将找到相同的解决方案。
我并不完全了解NN的OpenCV API,也不知道如何强制它不是随机地初始化NN,但也许你可以找到一些参数来提供伪随机数生成器种子进入它。
你可以谷歌任何关于NN初始化的论文,因为选择NN的起点是一个众所周知的问题,并且在大多数情况下随机初始化并不好,但它很简单。 您只需阅读here,here或here
的摘要