我有一个函数y=(x1)^2 + 2*(x2 )+(x3 )+ 3*(x4)^3
,我必须预测它的值。所以输入层有4个输入,输出层有1个隐藏层和2个节点。如果[1 0]
为正数,则默认输出为y
;如果[0 1]
为负数,则输出为y
。
输入介于0
和1
之间,权重介于-1
和1
之间。 Alpha为0.01
,阈值为0.005
。
当我训练200个例子的数据时,我得到94%的训练数据和86%的测试数据(隐藏层中的4个节点)。
我在250个示例的训练集上获得90.2%的准确率,在测试数据上获得96%的准确率。并且再次运行相同的程序会在训练和测试数据上产生不同的准确性(由于随机权重)。
所以现在你可以建议我如何才能提高准确度达到98% - 100%。
答案 0 :(得分:0)
要提高性能和收敛速度,请在动量更新中添加动量项。该术语减少了梯度下降期间的振荡,并且可以导致梯度下降以超出局部最小值。发生这种情况是因为如果梯度下降到达类似高原的结构,则梯度变得非常小并且算法可能会停止。
由于动量项将最近的权重更新与当前更新的alpha(与学习率不同)相加,因此能够超越此类平台。
来源:https://page.mi.fu-berlin.de/rojas/neural/neuron.pdf
我不知道您的培训程序,但您可以按如下方式培训您的网络:
将所有训练数据输入网络。然后验证测试数据的结果。执行此操作直到在时间t运行的验证结果几乎等于t-1的结果,因此测试数据的错误将停止下降。