基于遗传算法优化的BP神经网络图像分割matlab仿真

发布时间 2023-03-22 21:15:33作者: 我爱C编程

1.算法描述

        遗传算法(Genetic AlgorithmGA)是一种基于自然选择和基因遗传学原理的优化搜索方法。它将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适配值函数及一系列遗传操作对各个体进行筛选,从而使适配值高的个体被保留下来,组成新的群体,新群体中各个体适应度不断提高,直至满足一定的极限条件。此时,群体中适配值最高的个体即为待优化参数的最优解。正是由于遗传算法独具的工作原理,使它能够在复杂空间进行全局优化搜索,并且具有较强的鲁棒性。

 

       遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,具有以下特点:

1)以决策变量的编码作为运算对象。传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法是使用决策变量的某种形式的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算中可借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化激励,也可以很方便地应用遗传操作算子。

2)直接以适应度作为搜索信息。传统的优化算法不仅需要利用目标函数值,而且搜索过程往往受目标函数的连续性约束,有可能还需要满足“目标函数的导数必须存在”的要求以确定搜索方向。遗传算法仅使用由目标函数值变换来的适应度函数值就可确定进一步的搜索范围,无需目标函数的导数值等其他辅助信息。直接利用目标函数值或个体适应度值也可以将搜索范围集中到适应度较高部分的搜索空间中,从而提高搜索效率。

3)使用多个点的搜索信息,具有隐含并行性。传统的优化算法往往是从解空间的一个初始点开始最优解的迭代搜索过程。单个点所提供的搜索信息不多,所以搜索效率不高,还有可能陷入局部最优解而停滞;遗传算法从由很多个体组成的初始种群开始最优解的搜索过程,而不是从单个个体开始搜索。对初始群体进行的、选择、交叉、变异等运算,产生出新一代群体,其中包括了许多群体信息。这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。

4) 使用概率搜索而非确定性规则。传统的优化算法往往使用确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方向和转移关系,这种确定性可能使得搜索达不到最优店,限制了算法的应用范围。遗传算法是一种自适应搜索技术,其选择、交叉、变异等运算都是以一种概率方式进行的,增加了搜索过程的灵活性,而且能以较大概率收敛于最优解,具有较好的全局优化求解能力。但,交叉概率、变异概率等参数也会影响算法的搜索结果和搜索效率,所以如何选择遗传算法的参数在其应用中是一个比较重要的问题。

 

     将遗传算法(GA)与BP神经网络相结合,使用GA优化BP神经网络的主要参数。然后将影响输出响应值的多个特征因素作为GA-BP神经网络模型的输入神经元, 输出响应值作为输出神经元进行预测测试。BP神经网络的网络层包括输入层,隐含层和输出层三个网络层次,其基本结构如下图所示:

 

 

 

基于三层网络结构的BP神经网络具有较为广泛的应用场合和训练效果。

 

        BP神经网络中,隐含层数量对神经网络的性能有着至关重要的影响,如果隐含层数量过多,会大大增加BP神经网络的内部结构的复杂度,从而降低学习效率,增加训练时间;如果隐含层数量过少,则无法精确获得训练输入数据和输出结果之间的内在规律,增加预测误差。因此,选择合适的隐含层个数具有十分重要的意义。由于隐含层个数的设置没有明确的理论可以计算,通常情况下,采用逐次分析的方法获得,即通过对不同隐含层所对应的神经网络进行预测误差的仿真分析,选择误差最小情况下所对应的隐含层个数。

 

        学习率,即网络权值得更新速度,当学习率较大的时候,网络权值的更新速度快,当网络稳定性会下降;当学习率较小的时候,网络权值的更新速度慢,网络较为稳定。这里选择BP神经网络的学习率方式参考上一章节隐含层的选择方式,即通过对比不同学习率的网络训练误差,选择性能较优的学习率。

 

       BP神经网络的初始网络权值对网络训练的效率以及预测性能有着较大的影响,通常情况下,采用随机生成[-11]之间的随机数作为BP神经网络的初始权值。

 

        本文,通过matlabBP神经网络工具箱函数newff来构建BP神经网络,通过newff函数构建BP网络,其主要步骤如下:

 

         第一,BP神经网络初始化后,其matlab程序如下:

 

         net = newff(traindata, trainaim, HiddenNum);

 

        其中traindata表示训练数据,trainaim表示训练目标,HiddenNum表示BP神经网络隐含层个数,net表示BP神经网络模型函数。

 

         第二,BP神经网络参数设置,其matlab程序所示:

 

设置学习率,其matlab程序为 net.trainParam.lr = 0.25

 

设置训练误差目标,其matlab程序为net.trainParam.goal = 1e-8

 

设置神经网络训练次数,其matlab程序为net.trainParam.epochs = 200

 

        第三,BP神经网络的训练,其matlab程序所示:

 

        net = train(net,train_data,train_aim);

 

这里通过train函数对神经网络net进行训练,得到训练后的BP神经网络模型。

 

其算法流程图如图2所示:

 

 

 

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

 

 

 

 

3.MATLAB核心程序

 

function [ net ] = gabptrain( gaP,bpP,P,T )
%gabptrain 结合遗传算法的神经网络训练
%  gaP 为遗传算法的参数信息.[遗传代数 最小适应值]。
%  bpP 为神经网络参数信息。[最大迭代次数 最小误差]
%  P 为样本数组
%  T 为目标数组
 
[W1, B1, W2, B2] = getWBbyga(gaP);
net = initnet(W1, B1, W2, B2,bpP);
net = train(net,P,T);
 
.........................................................
%遗传神经网络训练示例
gaP = [100 0.00001];
bpP = [500 0.00001];
load('data\sample.mat');
gabptrain( gaP,bpP,p,t )
 
%神经网络分割示例
load('data\net.mat');
img = imread('image\y.bmp');
bw = segment( net,img ) ;
figure;
subplot(2,1,1);
imshow(img);
subplot(2,1,2);
imshow(bw);
%传统BP训练
%出现的结果,可能收敛不到目标值,或者收敛步数太长(356步)
epochs = 2000;
goal = 0.00001 ;
net = newcf([0 255],[6 1],{'tansig' 'purelin'});
net.trainParam.epochs = epochs;
net.trainParam.goal = goal ;
load('data\sample.mat');
net = train(net,p,t);
 
%遗传BP训练
%遗传算法寻找最优权值阈值会用一些时间,
gaP = [100 0.00001];
bpP = [500 0.00001];
gabptrain( gaP,bpP,p,t );