我们知道,在建立神经网络的时候,需要给各个节点和连接赋予阈值和权值,但一般我们都是随机赋予,然后让系统在一次次的训练中需找到最小值。这种方法很有一种碰运气的成分在里面,而用遗传算法来优化BP神经网络则可以让神经网络从一个较接近的水准开始训练。
所谓用遗传算法优化,优化的是神经网络训练前各节点的初始值,这些初始值不再取随机值,而是用我们通过遗传算法得到的值来代替。
我们把每个物种赋予一个DNA序列,这个序列包含着各个阈值和权值,假设我们的网络是一个2-5-1的网络,那么DNA的长度就可以是2*5+5+5*1+1 = 21,每位表示一个阈值或权值。
再设定好这个种群的大小,即有多少个个体,然后就可以开始进化这个物种啦。
进化过程不短重复这几步
1.计算个体的适应度,即代入它的基因(阈值权值)计算所得到的与期望值的差值。
2.记录适应度最好即差值最小的个体。
3.轮盘法选择个体,适应度好的更容易被选到。
4.把选择出来的个体进行交叉和变异,相当于生物的有性繁殖和基因突变。
到了设定的遗传代数之后,得到的最优个体基因就比较接近最终的阈值权值啦,我们用这个个体的基因来初始化BP神经网络,再进行训练和预测,可以得到更好的效果。
下面是主函数的代码,其中的子函数请下载资源。
%% 该代码为基于遗传算法神经网络的预测代码
% 清空环境变量
clc
clea