matlab net.lw,优化BP过程当中出现net.lW{2,1}=reshape(w2,outputnum,hiddennum);

能不能帮忙看个程序啊

clc

clear

%读取数据

%节点个数

inputnum=15;

hiddennum=31;

outputnum=5;

%训练数据和预测数据

P=[0.112        0.123        0.1348        0.1251        0.1351        0.1296        0.1143        0.1025        0.1321        0.1287;

0.8087        0.7641        1.096        0.8505        0.4881        0.6257        0.8843        0.6868        0.7741        0.8212;

0.5615        0.6731        1.0763        0.9772        0.8487        0.5155        0.8392        0.6281        0.7732        0.5213;

0.8224        0.847        1.2066        0.9704        0.9307        0.7015        1.1443        0.8903        0.9843        1.0228;

0.7873        0.784        1.2069        0.9005        0.4663        0.6051        0.8972        0.6713        0.5632        0.6342;

0.65           0.639        0.9221        0.8575        0.6365        0.848        0.5214        0.7389        0.5332        0.4213;

0.5245        0.832        0.6127        0.622        0.9831        1.211        0.1762        0.489        0.9881        0.2565;

0.5218        1.282        0.9217        0.3729        0.711        0.1528        0.299        0.4772        1.292        0.7018;

0.228        0.274        0.5821        0.723        1.2103        0.6624        0.493        0.3516        0.7355        0.5218;

0.9882        0.583        0.7742        0.902        0.4026        0.9528        0.5629        0.4218        0.8923        0.532;

0.8372        0.8374        0.1142        0.638        0.263        0.7008        0.8249        0.3746        0.827        0.1004;

1.21        0.7218        0.5218        0.218        0.3759        0.3024        0.4933        0.856        0.3975        0.8274;

0.1384        0.1102        0.9005        0.832        0.4664        0.2565        0.8003        0.2355        0.6392        0.6623;

0.21        0.3736        0.8572        0.133        0.9712        0.3028        0.4771        0.8236        0.1039        1.037;

0.319        0.8203        0.7371        1.173        0.7392        0.2821        0.3924        0.593        0.7029        0.9928];

P_test=[0.102        0.123        0.1348        0.1331        0.1351        0.1296        0.1143        0.1025        0.1321        0.1287;

0.9087        0.7641        1.096        0.8505        0.5881        0.6257        0.8843        0.7868        0.7741        0.8212;

0.8824        0.847        1.2066        0.9704        0.8307        0.7015        1.1443        0.8903        0.9843        1.022]';

T=[0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;

0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0]';

%选连样本输入输出数据归一化

% [inputn,inputps]=mapminmax(input_train);

% [outputn,outputps]=mapminmax(output_train);

P=minmax(P);

T=minmax(T);

%构建网络

net= newff(minmax(P),[31,5],{'tansig','logsig'},'trainlm');

% 参数初始化

%粒子群算法中的两个参数

numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;

c1 = 1.49445;

c2 = 1.49445;

maxgen=100;   % 进化次数

sizepop=20;   %种群规模

Vmax=1;

Vmin=-1;

popmax=5;

popmin=-5;

for i=1:sizepop

pop(i,:)=5*rands(1,numsum);

V(i,:)=rands(1,numsum);

fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,P,T);

end

% 个体极值和群体极值

[bestfitness bestindex]=min(fitness);

zbest=pop(bestindex,:);   %全局最佳

gbest=pop;    %个体最佳

fitnessgbest=fitness;   %个体最佳适应度值

fitnesszbest=bestfitness;   %全局最佳适应度值

%% 迭代寻优

for i=1:maxgen

i

for j=1:sizepop

%速度更新

V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));

V(j,find(V(j,:)>Vmax))=Vmax;

V(j,find(V(j,:)

%种群更新

pop(j,:)=pop(j,:)+0.2*V(j,:);

pop(j,find(pop(j,:)>popmax))=popmax;

pop(j,find(pop(j,:)

%自适应变异

pos=unidrnd(21);

if rand>0.95

pop(j,pos)=5*rands(1,1);

end

%适应度值

fitness(j)=fun(pop(j,:),inputnum,hiddennum,outputnum,net,P,T);

end

for j=1:sizepop

%个体最优更新

if fitness(j) < fitnessgbest(j)

gbest(j,:) = pop(j,:);

fitnessgbest(j) = fitness(j);

end

%群体最优更新

if fitness(j) < fitnesszbest

zbest = pop(j,:);

fitnesszbest = fitness(j);

end

end

yy(i)=fitnesszbest;

end

%% 结果分析

plot(yy)

title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);

xlabel('进化代数');ylabel('适应度');

x=zbest;

%% 把最优初始阀值权值赋予网络预测

% %用遗传算法优化的BP网络进行值预测

w1=zbest(1:inputnum*hiddennum);

B1=zbest(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);

w2=zbest(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);

B2=zbest(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';

%  net=newff(inputnum,outputnum,hiddennum);

%% BP网络训练

%网络进化参数

net.trainParam.epochs=100;

net.trainParam.lr=0.1;

%net.trainParam.goal=0.00001;

%网络训练

net=train(net,P,T);

%% BP网络预测

%数据归一化

y=sim(net,P);

y_test=sim(net,P_test)

子程序如下:

function error = fun(x,inputnum,hiddennum,outputnum,net,P,T)

%该函数用来计算适应度值

%x          input     个体

%inputnum   input     输入层节点数

%outputnum  input     隐含层节点数

%net        input     网络

%inputn     input     训练输入数据

%outputn    input     训练输出数据

%error      output    个体适应度值

%提取

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';

% %

% % %网络训练

an=sim(net,P);

% %

error=sum(abs(an-T));

In an assignment  A(I) = B, the number of elements in B and

I must be the same.

Error in ==> PSO at 62

fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,P,T);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值