-4

我在研究中使用 Encog 2.4.0 和 Java 来评估字体数字 (0-9) 识别中的反向传播和遗传算法。我正在使用 JavaCV 将我的数字(图像)处理为 0 和 1 的文本文件,每一行代表一个字体图像图像。每个字体(行)有 256 个属性(0 或 1)。我的网络输入节点号是 256,输出节点是 10(类),我在我的网络中使用 sigmoid 激活函数。我的输出也归一化为 0 和 1(例如 1000000000 表示 0,0100000000 表示 1,依此类推直到 9)。使用不同的训练集(100 到 700 个样本)和测试集(50 到 300)进行 11 次测试运行,具有不同的学习率和动量参数,我对反向传播的准确性和速度(10 秒到< 4 分钟)。但不幸的是 :

网络输入和输出结构类似于 XOR 示例。在 XOR 中,输入是 4 X 2 的数组,输出是 4 X 1。

我的是:输入的“样本数”X 256,输出的“样本数”X 10。

任何人都可以阐明我要去哪里错了吗?

谢谢,霍斯

4

1 回答 1

1

首先,这是一个非常旧的 Encog 版本。遗传算法代码在 3.x 中发生了很大变化,仅此一项可能会有所帮助。

至于为什么它无法收敛,这可能是一个难题,无需查看实际数据并进行实验。一些想法。

  • 我会确保正确地创建人口。选择人口中最好的成员,看看你是否可以通过反向传播训练它收敛。确保激活函数符合您的预期。
  • 查看 GA 与 BP 训练网络的权重范围,看看是否发生任何疯狂的事情将 GA 权重推到不寻常的范围。
于 2014-09-01T01:19:34.703 回答