我正在使用反向传播算法训练一个神经网络,这是总误差的图表:
(我使用以下公式计算总误差:http://www.colinfahey.com/neural_network_with_back_propagation_learning/neural_network_with_back_propagation_learning_en.html 第6.3部分:总训练误差)
我使用了幂趋势线,经过计算,我发现如果训练周期数为13000时,总误差为0.2
这不是太高了吗?
这个图表正常吗?看起来训练过程会花费很长时间… 对吗?我应该怎么做?没有更快的方法吗?
编辑:我的神经网络有一个包含200个神经元的隐藏层,我的输入和输出层有10-12个神经元。我的问题是字符聚类。(它将波斯字符聚类成一些集群,采用监督训练)
回答:
所以你使用了一个包含200个输入节点和10-12个隐藏节点的隐藏层的人工神经网络,你的隐藏层和输出层使用了什么激活函数吗?
这是标准的反向传播训练算法吗?你使用的是什么训练函数?每种类型的训练函数都会影响训练速度,在某些情况下还会影响其泛化能力,你不希望对数据进行训练,以至于你的神经网络只能适合你的训练数据。
理想情况下,你希望有不错的训练数据,这可能是你真实数据的15%的子样本。你可以使用基于共轭梯度的算法来训练你的数据:http://www.mathworks.co.uk/help/toolbox/nnet/ug/bss331l-1.html#bss331l-2,这将快速训练你的网络。
10-12个节点可能并不适合你的数据,你可以尝试以5个为单位改变节点数量,或者添加另一层,一般来说,更多的层会提高你的网络对问题的分类能力,但会增加计算复杂性,从而减缓训练速度。
这些10-12个节点应该是你试图分类的“特征”吧?
如果是这样,你可能希望对它们进行归一化处理,根据你的激活函数,将每个特征重新缩放到0到1之间或-1到1之间(例如,tan sigmoid将产生-1到+1范围内的值):http://www.heatonresearch.com/node/706
你还可以训练一个神经网络来确定你的隐藏层应该有的最佳节点数。