24小时热门版块排行榜    

查看: 404  |  回复: 2

groove7887

木虫 (小有名气)

[求助] 神经网络变量清除

用clear清除变量后,把训练好的神经网络数据即MAT文件调用出来进行优化,但是同样的条件每次优化的结果都一样,这是为什么呢?困扰我好久了。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

【答案】应助回帖


感谢参与,应助指数 +1
xiegangmai: 金币+1, 谢谢参与! 2012-05-07 22:54:53
同样的条件每次优化的结果都一样,这不很正常吗?
楼主能否将问题描述得更具体清楚一些?
2楼2012-05-07 20:06:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

groove7887

木虫 (小有名气)

xiegangmai: 编辑内容 2012-05-07 22:55
xiegangmai: , 帖子中代码部分可以用“插入代码”功能 2012-05-07 22:55:40
引用回帖:
2楼: Originally posted by nono2009 at 2012-05-07 20:06:13:
同样的条件每次优化的结果都一样,这不很正常吗?
楼主能否将问题描述得更具体清楚一些?

谢谢,可以。
CODE:
input_train=[500 11 0.4 0.22 600;500 11 0.6 0.22 600;500 11 0.8 0.22 600;400 13 0.4 0.16 550;
    400 13 0.4 0.18 550;400 13 0.4 0.2 550;600 11 0.4 0.18 500;600 12 0.4 0.18 500;
    600 13 0.4 0.18 500;350 11 1.2 0.2 500;400 11 1.2 0.2 500;500 11 1.2 0.2 500;
    400 11 0.6 0.18 450;400 11 0.6 0.18 500;400 11 0.6 0.18 550;350 10 0.4 0.16 450;
    500 12 0.8 0.2 450;600 13 1.2 0.22 450;400 10 0.8 0.22 500;500 13 0.6 0.16 500;
    350 12 0.6 0.22 550;500 10 1.2 0.18 550;600 11 0.8 0.16 550;350 13 0.8 0.18 600;
    400 12 1.2 0.16 600;600 10 0.6 0.2 600;500 12 0.4 0.16 400;400 8 0.6 0.18 400;
    450 9 0.4 0.16 400;650 14 0.6 0.18 400;500 9 0.8 0.18 400;300 11 0.2 0.14 450;
    450 11 0.6 0.14 450;400 9 1.2 0.16 450;550 14 1.2 0.16 450;650 15 0.6 0.2 450;
    650 14 0.4 0.2 450;500 9 0.4 0.24 450;300 9 0.6 0.14 500;400 9 0.4 0.16 500;
    400 11 0.6 0.18 500;500 11 0.6 0.18 500;450 9 0.8 0.2 500;550 11 0.8 0.2 500;
    650 11 0.6 0.24 500;350 8 0.8 0.16 550;650 9 1.2 0.16 550;500 11 0.2 0.16 550;
    500 12 0.6 0.2 550;650 15 0.8 0.24 550;500 12 0.2 0.16 600;450 8 0.6 0.16 600;
    400 12 0.4 0.18 600;450 11 1.0 0.2 600;400 8 0.8 0.22 600]';
output_train=[0.0828;0.0807;0.0767;0.0624;0.0674;0.0789;0.0744;0.0761;0.0746;0.0697;
    0.0704;0.0722;0.0666;0.0655;0.0685;0.0613;0.0731;0.0800;0.0781;0.0599;
    0.076;0.065;0.0607;0.0627;0.0575;0.0804;0.0627;0.0663;0.068;0.0663;
    0.0668;0.0676;0.0541;0.0591;0.0632;0.0722;0.0779;0.0924;0.0543;0.0688;
    0.0656;0.0664;0.0717;0.0716;0.0882;0.0596;0.0606;0.0996;0.0721;0.0835;
    0.0960;0.0701;0.0712;0.0699;0.0775]';
input_test=[650 14 1.0 0.24 600; 400 12 1.2 0.2 500;400 12 0.6 0.18 450;
   600 13 0.2 0.18 500; 400 8 0.2 0.2 500;450 8 0.6 0.16 600]';
output_test=[0.0823;0.0704;0.0667;0.0969;0.0807;0.0727]';
hiddennum = 11; % 隐层第一层节点数
TypeNum = 1;   % 输出维数
TF1 = 'logsig';TF2='tansig';TF3 = 'purelin';%各层传输函数,TF3为输出层传输函数
%数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
net=newff(minmax(input_train),[hiddennum,TypeNum],{TF1 TF3},'trainlm');
net.trainParam.epochs=2000;
net.trainParam.lr=0.01;
net.trainParam.goal=0.001;

%网络训练
net=train(net,inputn,outputn);
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);

%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
save data net inputps outputps

%%%%这是神经网络代码,一共5个变量,我想用GA优化工艺参数

% % 遗传算法主函数
%% 初始化遗传算法参数
%初始化参数
maxgen=100;                         %进化代数,即迭代次数
sizepop=30;                        %种群规模
pcross=[0.7];                       %交叉概率选择,0和1之间
pmutation=[0.2];                    %变异概率选择,0和1之间

lenchrom=[1 1 1 1 1];          %每个变量的字串长度,如果是浮点变量,则长度都为1
bound=[300 650;8 15;0.2 1.2;0.16 0.24;400 600];  %数据范围


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);   %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:);  %最好的染色体
avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[avgfitness bestfitness];

%% 迭代寻优
% 进化开始
for i=1:maxgen
      i
    % 选择
    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);
   
    % 计算适应度
    for j=1:sizepop
        x=individuals.chrom(j,:); %解码
        individuals.fitness(j)=fun(x);   
    end
   
  %找到最小和最大适应度的染色体及它们在种群中的位置
    [newbestfitness,newbestindex]=min(individuals.fitness);
    [worestfitness,worestindex]=max(individuals.fitness);
    % 代替上一次进化中最好的染色体
    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]; %记录每一代进化中最好的适应度和平均适应度
end
%进化结束

%% 结果分析
[r c]=size(trace);
figure(2)
plot([1:r]',trace(:,2),'r-');
title('适应度曲线','fontsize',12);
xlabel('进化代数','fontsize',12);
ylabel('适应度','fontsize',12);
axis([0,100,0,1])
disp('适应度 变量');
x=bestchrom;
% 窗口显示
disp([bestfitness x]);
%%%%%%%%%%%%%%%%%%%
figure(2)
plot(trace(:,2))

%%%%%%%%%%%这是GA主程序,我现在想选择种群规模,每次更换种群规模后我都得重新开启MATLAB软件,重新训练神经网络,因为用clear;clc清除后再把训练好的NET.MAT文件调用出来算同样一个结果每次都不一样,且差别很大。
不知道有没有说清楚啊。

[ Last edited by xiegangmai on 2012-5-7 at 22:55 ]
3楼2012-05-07 20:21:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 groove7887 的主题更新
信息提示
请填处理意见