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

时间:2012-09-03 08:06:50

标签: machine-learning overflow neural-network

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

我无法用QuasiNewtonMethod训练它,因为它在算法中使用了一个大矩阵,它不适合我的记忆。我使用GradientDescentObjectiveFunctionalNormalizedSquaredError

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

此外我的数据集太大(当它是CSV时大约800mb)并且我无法完全加载它。因此,我创建了许多InputTargetDataSets 1000个实例,并将其保存为XML( Flood 的默认格式),并在每个数据集上随机调整一个纪元进行训练。但是当我在一个大数据集(10000个实例)上训练它时,它会溢出。

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

1 个答案:

答案 0 :(得分:1)

我建议输入标准化。你应该考虑一下,如果你有1600个神经元。输入层的输出将总和(如果是sigmoid神经​​元)并且可能存在许多问题。

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

神经元的重量有一些提示。我会建议非常小< 0.01。也许你可以提供更多关于NN和输入间隔,权重等的信息。我可以给你一些其他想法。

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