遗传算法优化bp神经网络.zip

  • T8_810696
    了解作者
  • 30.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-14 12:51
    上传日期
遗传算法优化后的神经网络
遗传算法优化bp神经网络.zip
  • 遗传算法优化bp神经网络
  • main.m
    5.2KB
  • 数据.xlsx
    17KB
  • calc_error.p
    564B
  • fitness.p
    402B
  • data.mat
    12.3KB
内容介绍
%% 此程序为BP神经网络和基于遗传算法优化的BP神经网络预测效果对比 % 清空环境变量 clear,close all clc warning off %% 读取数据 data=xlsread('数据.xlsx'); input=data(:,1:end-1); output=data(:,end); %% 设置训练数据和预测数据 L=length(output); %总样本个数 num=150; %设置训练样本个数 input_train = input(1:num,:)'; output_train = output(1:num,:)'; input_test = input(num+1:end,:)'; output_test = output(num+1:end,:)'; disp(['训练样本数',num2str(num)]) disp(['测试样本数',num2str(L-num)]) %% 数据归一化 [inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化 [outputn,outputps]=mapminmax(output_train); inputn_test=mapminmax('apply',input_test,inputps);% 对测试样本数据进行归一化 %% 节点个数 inputnum=size(input_train,1); %输入层节点个数 outputnum=size(output_train,1); %输出层节点个数 hiddennum=10; %% 构建BP神经网络 disp(' ') disp('标准的BP神经网络:') net0=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm','learngdm');% 建立模型 %网络参数配置 net0.trainParam.epochs=1000; % 训练次数,这里设置为1000次 net0.trainParam.lr=0.01; % 学习速率,这里设置为0.01 net0.trainParam.goal=0.00001; % 训练目标最小误差,这里设置为0.0001 net0.trainParam.show=25; % 显示频率,这里设置为每训练25次显示一次 net0.trainParam.mc=0.01; % 动量因子 net0.trainParam.min_grad=1e-6; % 最小性能梯度 net0.trainParam.max_fail=6; % 最高失败次数 %开始训练 [net0,tr0]=train(net0,inputn,outputn); figure plotperform(tr0) %训练集的误差曲线 %预测 an0=sim(net0,inputn_test); %用训练好的模型进行仿真 %预测结果反归一化与误差计算 test_simu0=mapminmax('reverse',an0,outputps); %把仿真得到的数据还原为原始的数量级 %误差指标 [mae0,mse0,rmse0,mape0,error0,errorPercent0]=calc_error(output_test,test_simu0); %% 遗传算法寻最优权值阈值 disp(' ') disp('GA优化BP神经网络:') net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm','learngdm');% 建立模型 %网络参数配置 net.trainParam.epochs=1000; % 训练次数,这里设置为1000次 net.trainParam.lr=0.01; % 学习速率,这里设置为0.01 net.trainParam.goal=0.00001; % 训练目标最小误差,这里设置为0.0001 net.trainParam.show=25; % 显示频率,这里设置为每训练25次显示一次 net.trainParam.mc=0.01; % 动量因子 net.trainParam.min_grad=1e-6; % 最小性能梯度 net.trainParam.max_fail=6; % 最高失败次数 save data inputnum hiddennum outputnum net inputn outputn inputn_test outputps output_test %初始化ga参数 PopulationSize_Data=10; %初始种群规模 MaxGenerations_Data=30; %最大进化代数 CrossoverFraction_Data=0.8; %交叉概率 MigrationFraction_Data=0.2; %变异概率 nvars=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; %自变量个数 lb=repmat(-3,nvars,1); %自变量下限 ub=repmat(3,nvars,1); %自变量上限 %调用遗传算法函数 options = optimoptions('ga'); options = optimoptions(options,'PopulationSize', PopulationSize_Data); options = optimoptions(options,'CrossoverFraction', CrossoverFraction_Data); options = optimoptions(options,'MigrationFraction', MigrationFraction_Data); options = optimoptions(options,'MaxGenerations', MaxGenerations_Data); options = optimoptions(options,'SelectionFcn', @selectionroulette); %轮盘赌选择 options = optimoptions(options,'CrossoverFcn', @crossovertwopoint); %两点交叉 options = optimoptions(options,'MutationFcn', { @mutationgaussian [] [] }); %高斯变异 options = optimoptions(options,'Display', 'off'); %‘off’为不显示迭代过程,‘iter’为显示迭代过程 options = optimoptions(options,'PlotFcn', { @gaplotbestf }); %最佳适应度作图 %求解 [x,fval] = ga(@fitness,nvars,[],[],[],[],lb,ub,[],[],options); %%把最优初始阀值权值赋予网络预测 % %用遗传算法优化的BP网络进行值预测 % W1= net. iw{1, 1}%输入层到中间层的权值 % B1 = net.b{1}%中间各层神经元阈值 % % W2 = net.lw{2,1}%中间层到输出层的权值 % B2 = net. b{2}%输出层各神经元阈值 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}=reshape(B2,outputnum,1); %% 优化后的神经网络训练 [net,tr]=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本 figure plotperform(tr) %训练集的误差曲线 %% 优化后的神经网络测试 an1=sim(net,inputn_test); test_simu1=mapminmax('reverse',an1,outputps); %把仿真得到的数据还原为原始的数量级 %误差指标 [mae1,mse1,rmse1,mape1,error1,errorPercent1]=calc_error(output_test,test_simu1); %% 作图 figure plot(1:L-num,output_test,'b-*') hold on plot(1:L-num,test_simu0,'rp-') hold on plot(1:L-num,test_simu1,'mo-') legend('真实值','标准BP预测值','GABP预测值') xlabel('测试样本') ylabel('值') title('神经网络预测值和真实值对比图') figure plot(1:L-num,error0,'rp-') hold on plot(1:L-num,error1,'mo-') legend('标准BP预测误差','GABP预测误差') xlabel('测试样本') ylabel('误差') title('神经网络预测值和真实值误差对比图')
评论
    相关推荐
    • bp神经网络算法
      bp神经网络算法,VC6.0工程,可以利用离线学习参数,预测结果
    • 神经网络算法
      MATLAB 实现的神经网络机器学习算法
    • HOPFIELD神经网络算法源码
      共两个示例代码,一个是实现了离散Hopfield神经网络对0~9数字的正确识别。另一个是实现了连续Hopfield网络解决的旅行商问题。代码中都添加了基本注释。
    • 遗传神经网络算法
      遗传算法优化神经网络算法,直接输入训练数据和测试数据就可以,
    • 神经网络算法综合压缩包
      神经网络方面的算法,这是一个相关算法的压缩包,不一定全,呵呵
    • HOPFIELD神经网络算法源码
      共两个示例代码,一个是实现了离散Hopfield神经网络对0~9数字的正确识别。另一个是实现了连续Hopfield网络解决的旅行商问题。代码中都添加了基本注释。
    • BP神经网络算法源码
      没有采用误差反馈原理,因此用此法训练出来的神经网络结果与传统算法是等效的。其基本思想是:由所给的输入、输出模式对通过作用于神经网络来建立线性方程组,运用高斯消元法解线性方程组来求得未知权值,而未采用...
    • 神经网络算法 源程序
      神经网络算法源程序,如SOM、HOPFIELD、CPN、BPN、BOLTZMAN、ART、ADALINE,同时提供针对不同算法的演示源程序。
    • 神经网络算法 源码
      神经网络的源码 里面包含几种常见神经网络类型和相应的源代码
    • C++ bp神经网络算法
      经改过的vc++神经网络算法基本bp神经网络算法和改进型bp神经网络算法都是我改写完成的算法,是网上到处传播的一个c++ bp神经网络算法改写的, 由于网上的那个算法编译会出现若干百个错误, 所以我在其基础上重新编写...