使用Encog库的遗传算法需要数小时才能训练并且不准确?

时间:2014-08-27 01:01:43

标签: java eclipse ocr encog

我在我的研究中使用带有Java的Encog 2.4.0来评估字体数字(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分钟)。但不幸的是:(使用具有不同参数的遗传算法进行11次测试,我无法获得准确性或速度正确。对于BP,4分钟GA需要2到13个小时,准确度也低于0.01%这个案子似乎是偶然的。我尝试过初始种群大小从200到500,交配种群从0.25(25%)到0.50(50%),突变率I尝试了0.1,0.05,0.01和0.001。我正在使用FanInRandomizer。

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

我的是:'没有样本'X 256用于输入,'没有样本'X 10用于输出。

有人可以说明我出错的地方吗?

谢谢, 胡斯

1 个答案:

答案 0 :(得分:1)

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

至于为什么它没有收敛,这可能是一个困难的问题,而不是查看实际数据和试验。一些想法。

  • 我会确保正确创建人口。以最好的成员为例,看看你是否能够训练它来收敛。确保激活功能符合您的期望。
  • 查看GA与BP训练网络的重量范围,看看是否有任何疯狂的事情将GA权重推向不寻常的范围。