我正在训练我的神经网络对图像中的某些东西进行分类。我裁剪40x40像素的图像,并将其分类为某些对象或不对象。因此它有1600个输入神经元,3个隐藏层(500,200,30)和1个输出神经元,必须说1或0.我使用Flood库。
我无法用QuasiNewtonMethod
训练它,因为它在算法中使用了一个大矩阵,它不适合我的记忆。我使用GradientDescent
而ObjectiveFunctional
是NormalizedSquaredError
。
问题在于,通过训练它会溢出权重,并且每个输入的神经网络输出都是INF
或NaN
。
此外我的数据集太大(当它是CSV时大约800mb)并且我无法完全加载它。因此,我创建了许多InputTargetDataSets
1000个实例,并将其保存为XML( Flood 的默认格式),并在每个数据集上随机调整一个纪元进行训练。但是当我在一个大数据集(10000个实例)上训练它时,它会溢出。
为什么会发生这种情况?如何防止这种情况发生?
答案 0 :(得分:1)
我建议输入标准化。你应该考虑一下,如果你有1600个神经元。输入层的输出将总和(如果是sigmoid神经元)并且可能存在许多问题。
打印出一些步骤非常有用。例如,它在哪个步骤中溢出。
神经元的重量有一些提示。我会建议非常小< 0.01。也许你可以提供更多关于NN和输入间隔,权重等的信息。我可以给你一些其他想法。
顺便说一下,我认为从数学上证明了两层应该足够,所以如果你没有使用一些模拟人眼的专门算法,就不需要三层隐藏层。