训练中神经网络权重的溢出



我正在训练我的神经网络对图像中的一些东西进行分类。我裁剪了40x40像素的图像,并将其分类为某个对象。因此,它有1600个输入神经元,3个隐藏层(500、200、30)和1个输出神经元,必须说1或0。我使用Flood库。

我不能用QuasiNewtonMethod训练它,因为它在算法中使用了一个大矩阵,而且它不适合我的记忆。所以我使用GradientDescent,而ObjectiveFunctionalNormalizedSquaredError

问题是通过训练它溢出了权重,并且对于每个输入,神经网络的输出是INFNaN

此外,我的数据集太大(当它是CSV格式时,大约为800mb),我无法完全加载它。因此,我制作了许多具有1000个实例的InputTargetDataSets,并将其保存为XML(Flood的默认格式),并在随机打乱的每个数据集上训练一个历元。但当我只在一个大数据集(10000个实例)上训练它时,它也会溢出。

为什么会发生这种情况,我该如何防止?

我建议对输入进行规范化。你还应该考虑一下,如果你有1600个神经元。。输入层的输出会求和(如果是sigmoid神经元),可能会有很多问题。

打印出一些步骤非常有用。。例如在哪个步骤中溢出。

有一些关于神经元重量的提示。我推荐非常小的<0.01.也许如果你能提供更多关于NN、输入间隔、权重等的信息,我可以给你一些其他想法。

顺便说一句,我认为数学上已经证明了两层就足够了,所以如果你不使用一些模拟人眼的专门算法,就不需要三层隐藏层。。

最新更新