matlab ga no feasible,GA优化BP神经网络程序出错

我用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);

我看了好几遍,也不知道究竟是哪里出错,能不能请高手帮我看看?

祝学习进步,工作顺利!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值