带有编码库的遗传算法需要数小时的训练,而且不准确



我在研究中使用Encog 2.4.0和Java来评估字体数字(0-9)识别中的反向传播和遗传算法。我使用JavaCV将我的数字(图像)处理为0和1的文本文件,每行代表一个字体图像。每个字体(行)有256个属性(0或1)。我的网络输入节点号是256,输出节点是10(类),我在网络中使用sigmoid激活函数。我的输出也归一化为0和1(例如1000000000表示0,0100000000表示1,依此类推,直到9)。有11个测试运行,使用不同的训练集(100到700个样本)和测试集(50到300个),使用不同参数的学习率和动量,我对具有准确性和速度(10秒到<4分钟)的反向传播性能感到非常满意。但不幸的是:(用不同参数的遗传算法进行了11次测试,我无法获得正确的准确性或速度。BP需要4分钟,GA需要2-13小时,在大多数情况下,准确性也低于0.01%,这似乎是偶然的。我试过从200到500的初始种群规模,从0.25(25%)到0.50(50%)的交配种群和突变我试过0.1、0.05、0.01和0.001。我正在使用FanInRandomizer。

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

我的是:输入为"样本数"X 256,输出为"样本数目"X 10。

有人能告诉我哪里出了问题吗?

谢谢,Hoss

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

至于为什么它不能收敛,如果不看实际数据和实验,这可能是一个难题。一些想法。

  • 我会确保人口得到适当的创造。取人群中最好的成员,看看你是否可以反向训练它以收敛。确保激活功能符合您的期望
  • 看看GA与BP训练网络的权重范围,看看是否发生了什么疯狂的事情,将GA权重推到了不寻常的范围

最新更新