新发展
我最近使用 OpenCV 的 MLP 实现来测试它是否可以解决相同的任务。OpenCV 能够对我的实现能够分类的相同数据集进行分类,但无法解决我无法解决的数据集。也许这是由于终止参数(确定何时结束训练)。我在 100,000 次迭代之前就停止了,MLP 没有泛化。这次的网络架构是 400 个输入神经元、10 个隐藏神经元和 2 个输出神经元。
我已经实现了多层感知器算法,并验证了它可以与 XOR 逻辑门一起使用。对于 OCR,我教网络正确分类用厚绘图工具(标记)绘制的“A”和“B”字母。但是,当我尝试教网络对薄的绘图工具(铅笔)进行分类时,网络似乎陷入了困境,无法在合理的时间内对字母进行分类。我用 GIMP 绘制的字母也是如此。
我知道人们说我们必须利用动力才能走出山谷,但我读到的消息来源很模糊。我尝试在误差变化不显着时增加动量值,并在高于时减小,但这似乎没有帮助。
我的网络架构是 400 个输入神经元(每个像素一个),2 个隐藏层,每个隐藏层 25 个神经元,输出层有 2 个神经元。这些图像是灰度图像,黑色像素的输入为 -0.5,白色像素的输入为 0.5。
编辑:
当前,网络正在训练,直到每个训练示例的计算误差低于可接受的误差常数。我也尝试过在 10,000 个 epoch 时停止训练,但这会产生不好的预测。使用的激活函数是 sigmoid 逻辑函数。我使用的误差函数是平方误差之和。
我想我可能已经达到了局部最小值而不是山谷,但这不应该重复发生。