我用GA程序优化40-15-3的神经网络,结果显示错误
??? Error using ==> network.subsasgn at 551
net.b{2} must be a 3-by-1 matrix.
Error in ==> fun at 30
net.b{2}=B2;
以下是代码:
clc
clear
%网络结构
inputnum=40;
hiddennum=15;
outputnum=3;
%读取数据
p=xlsread('network.xlsx','sheet3');
t=xlsread('network.xlsx','sheet4');
input_train=[p(:,1:11),p(:,15)];
input_test=p(:,12:14);
output_train=[t(:,1:11),t(:,15)];
output_test=t(:,12:14);
%数据归一化
[input1,ps]=mapminmax(input_train);
input2=mapminmax('apply',input_test,ps);
%建立网络
net=newff(input1,output_train,15);
%遗传算法参数初始化
maxgen=50
%迭代次数
sizepop=10
%种群规模
pcross=[0.4]
%交叉概率
pmutation=[0.2]
%变异概率
%节点总数
numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
lenchrom=ones(1,numsum);
%个体长度
bound=[-3*ones(numsum,1) 3*ones(numsum,1)];
%个体范围
%种群信息定义为结构体
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
avgfitness=[];
%每代平均适应度值
bestfitness=[];
%每代最佳适应度值
bestchrom=[];
%最优个体
%计算个体适应度值
for i = 1:sizepop
%个体初始化
individuals.chrom(i,:)=code(lenchrom,bound);
%计算个体适应度值
x=individuals.chrom(i,:);
individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,input1,output_train);
end
%迭代寻优
for i =1:maxgen
%选择操作
individuals=select(individuals.sizepop);
%交叉操作
individuals.chrom=cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
%变异操作
individuals.chrom=mutation(pmutation,lenchrom,individuals.chrom,sizepop,I,maxgen,bound);
%计算适应度值
for j=1:sizepop
x=individuals.chrom(j,:);
%个体
individuals.fitness(j)=fun(x,inputnum.hiddennum,outputnum,net,input1,output_train);
end
%寻找最优最差个体
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
%最优个体更新
ifbestfitness>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];
end
%把最优个体x赋给BP神经网络权值和阀值
x=bestchrom
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神经网络参数
net.trainparam.epochs=100;
net. trainparam.lr=0.1;
net. trainparam.goal=0.00001;
%BP神经网络训练
net= train(net,input1,output_train);
%BP神经网络预测
an=sim(net,input_test);
%%预测结果归一化
test=mapminmax(‘reverse’,an,outputps);
我看了好几遍,也不知道究竟是哪里出错,能不能请高手帮我看看?
祝学习进步,工作顺利!!