您好,登錄后才能下訂單哦!
這篇文章主要介紹“matlab中如何通過(guò)遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“matlab中如何通過(guò)遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)”文章能幫助大家解決問(wèn)題。
%% 清空環(huán)境變量
clc
clear
%% 網(wǎng)絡(luò)結(jié)構(gòu)建立
%讀取數(shù)據(jù)
load data input output
%節(jié)點(diǎn)個(gè)數(shù)
inputnum=2;
hiddennum=5;
outputnum=1;
%訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)
input_train=input(1:1900,:)';
input_test=input(1901:2000,:)';
output_train=output(1:1900)';
output_test=output(1901:2000)';
%選連樣本輸入輸出數(shù)據(jù)歸一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%構(gòu)建網(wǎng)絡(luò)
net=newff(inputn,outputn,hiddennum);
%% 遺傳算法參數(shù)初始化
maxgen=10; %進(jìn)化代數(shù),即迭代次數(shù)
sizepop=10; %種群規(guī)模
pcross=0.3; %交叉概率選擇,0和1之間
pmutation=0.1; %變異概率選擇,0和1之間
%節(jié)點(diǎn)總數(shù)
numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
lenchrom=ones(1,numsum);
bound=[-3*ones(numsum,1) 3*ones(numsum,1)]; %數(shù)據(jù)范圍
%% 種群初始化
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);
%將種群信息定義為一個(gè)結(jié)構(gòu)體
avgfitness=[];
%每一代種群的平均適應(yīng)度
bestfitness=[];
%每一代種群的最佳適應(yīng)度
bestchrom=[];
%適應(yīng)度最好的染色體
%初始化種群
for i=1:sizepop
%隨機(jī)產(chǎn)生一個(gè)種群
individuals.chrom(i,:)=Code(lenchrom,bound);
%編碼
x=individuals.chrom(i,:);
%計(jì)算適應(yīng)度
individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn); %染色體的適應(yīng)度
end
%找最好的染色體
[bestfitness, bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:); %最好的染色體
avgfitness=sum(individuals.fitness)/sizepop; %染色體的平均適應(yīng)度
% 記錄每一代進(jìn)化中最好的適應(yīng)度和平均適應(yīng)度
trace=[avgfitness bestfitness];
%% 迭代求解最佳初始閥值和權(quán)值
% 進(jìn)化開(kāi)始
for i=1:maxgen
% 選擇
individuals=Select(individuals,sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
%交叉
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
% 變異
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
% 計(jì)算適應(yīng)度
for j=1:sizepop
x=individuals.chrom(j,:); %解碼
individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);
end
%找到最小和最大適應(yīng)度的染色體及它們?cè)诜N群中的位置
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
% 代替上一次進(jìn)化中最好的染色體
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
individuals.chrom(worestindex,:)=bestchrom;
individuals.fitness(worestindex)=bestfitness;
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %記錄每一代進(jìn)化中最好的適應(yīng)度和平均適應(yīng)度
end
%% 遺傳算法結(jié)果分析
figure(1)
[r, c]=size(trace);
plot([1:r]',trace(:,2),'b--');
title(['適應(yīng)度曲線 ' '終止代數(shù)=' num2str(maxgen)]);
xlabel('進(jìn)化代數(shù)');ylabel('適應(yīng)度');
legend('平均適應(yīng)度','最佳適應(yīng)度');
x=bestchrom;
%% 把最優(yōu)初始閥值權(quán)值賦予網(wǎng)絡(luò)預(yù)測(cè)
% %用遺傳算法優(yōu)化的BP網(wǎng)絡(luò)進(jìn)行值預(yù)測(cè)
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
%% BP網(wǎng)絡(luò)訓(xùn)練
%網(wǎng)絡(luò)進(jìn)化參數(shù)
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
%net.trainParam.goal=0.00001;
%網(wǎng)絡(luò)訓(xùn)練
[net,per2]=train(net,inputn,outputn);
%% BP網(wǎng)絡(luò)預(yù)測(cè)
%數(shù)據(jù)歸一化
inputn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
test_simu=mapminmax('reverse',an,outputps);
error=test_simu-output_test;
關(guān)于“matlab中如何通過(guò)遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。