24小时热门版块排行榜    

CyRhmU.jpeg
查看: 4299  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

小布丁121

银虫 (小有名气)

[交流] pso优化神经网络(经典案例篇)论文必备已有5人参与

我用pso优化bp神经网络其中修改时,出现问题不知道怎么修改适应度值函数:
function error = fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
%该函数用来计算适应度值
%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.trainParam.epochs=20;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;
net.trainParam.show=100;
net.trainParam.showWindow=0;

%网络权值赋值
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}=reshape(B2,outputnum,1);
%网络训练
net=train(net,inputn,outputn);

an=sim(net,inputn);

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


主函数 %节点个数
inputnum=20;
hiddennum=60;
outputnum=5;
%构建网络
net=newff(inputn,outputn,hiddennum);
% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;

maxgen=100;   % 进化次数  
sizepop=30;   %种群规模

Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;

for i=1:sizepop
    pop(i,=5*rands(1,1565);
    V(i,=rands(1,21);
    fitness(i)=fun(pop(i,,inputnum,hiddennum,outputnum,net,inputn,outputn);
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,<Vmin))=Vmin;

        %种群更新
        pop(j,=pop(j,+0.2*V(j,;
        pop(j,find(pop(j,>popmax))=popmax;
        pop(j,find(pop(j,<popmin))=popmin;

        %自适应变异
        pos=unidrnd(21);
        if rand>0.95
            pop(j,pos)=5*rands(1,1);
        end

        %适应度值
        fitness(j)=fun(pop(j,,inputnum,hiddennum,outputnum,net,inputn,outputn);
    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=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;


net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;
不知道适应度值函数怎么修改老是出现问题
Error using fun (line 13)
Not enough input arguments.
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1990d03z27x

新虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
想请教一下,这个PSO优化BP程序,怎么后边出现遗传算法优化,是联合优化么?
非常感谢
3楼2016-09-05 18:09:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

张斌1993

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我也是用这个算法,可以加一下微信或qq吗

发自小木虫Android客户端
4楼2018-08-03 10:48:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Sherry-甜

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我最近也在整这个模型,不知道pso怎么处理优化的bp网络

发自小木虫Android客户端
5楼2018-11-05 14:57:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangwei0916

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
其实就是利用PSO优化BP模型的权值及阈值,提高BP模型精度!初始值设定很影响BP的精度。可以去看一下《MATLAB神经网络43个案例分析》这本书!

发自小木虫IOS客户端
6楼2018-11-09 15:09:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见