GA-BP采用遗传算法优化BP神经网络,注意这个优化的不是超参数,而是网络内部的权重和偏置参数...
GA-BP采用遗传算法优化BP神经网络注意这个优化的不是超参数而是网络内部的权重和偏置参数也就是w和b看清楚再问再联系 matlab代码自带数据集多元回归问题 遗传算法GA用的不是工具箱提供代码 优化的是BP的结构性参数w和b不是其他超参数看清楚了 rmae mae mape 相对误差几个评价指标并进行了可视化今天咱们唠唠怎么用遗传算法给BP神经网络的权重和偏置做深度调优。这个GA-BP玩法在回归预测任务里贼好用特别是当你的数据集变量多到脑壳疼的时候。直接上硬货用Matlab手撕代码不调用工具箱那种先看数据集怎么整。咱们这里用经典的混凝土抗压强度数据集21个样本8个特征1个输出。直接加载完记得做标准化data xlsread(Concrete.xlsx); [inputn, inputps] mapminmax(data(:,1:8),0,1); [outputn, outputps] mapminmax(data(:,9),0,1);这个mapminmax函数把数据压缩到[0,1]区间防止某些特征数值过大搞崩神经网络。接下来搭建BP网络骨架。注意这里用的是最原始的三层结构输入层8节点隐藏层10节点输出层1节点。遗传算法要优化的就是这中间所有的w和bnet newff(inputn, outputn, 10); net.trainParam.epochs 20; net.trainParam.goal 0.0001;重点来了传统BP直接用train函数训练咱们偏不。先把网络的权重参数全抽出来转成向量这就是遗传算法要处理的染色体w1 net.IW{1}; b1 net.b{1}; w2 net.LW{2}; b2 net.b{2}; chromosome [w1(:); b1(:); w2(:); b2(:)];这个转换操作相当于把网络拆解成基因序列后续的交叉变异都在这串数字上搞事情。GA-BP采用遗传算法优化BP神经网络注意这个优化的不是超参数而是网络内部的权重和偏置参数也就是w和b看清楚再问再联系 matlab代码自带数据集多元回归问题 遗传算法GA用的不是工具箱提供代码 优化的是BP的结构性参数w和b不是其他超参数看清楚了 rmae mae mape 相对误差几个评价指标并进行了可视化遗传算法的核心在适应度函数设计。这里用预测结果的MAE作为评判标准function error fitness_func(chromosome) % 解码染色体到网络参数 w1 reshape(chromosome(1:80),10,8); b1 chromosome(81:90); w2 reshape(chromosome(91:100),1,10); b2 chromosome(101); % 前向传播计算输出 hidden tansig(w1*input b1); output w2*hidden b2; % 计算误差 error mean(abs(output - target)); end这个函数会被遗传算法反复调用相当于每个染色体都要跑一遍网络看看表现。进化过程采用锦标赛选择两点交叉。注意变异操作这里用了高斯扰动比单纯的随机替换更柔和for i1:pop_size if rand mutate_rate offspring(i) offspring(i) randn*0.1; end end这种设置让参数在进化后期还能微调避免早熟收敛。训练完成后把最优染色体塞回网络可以看到权重分布明显比随机初始化更集中subplot(2,1,1) hist(net.IW{1}(:),20); title(优化前权重分布) subplot(2,1,2) hist(optimized_weights,20); title(优化后权重分布)直方图对比能清晰看出GA优化后的参数集中在-0.5到0.5区间不像初始参数那样分散在[-2,2]说明算法确实找到了更稳定的参数组合。最后上评价指标这三个误差指标的计算姿势要掌握mae mean(abs(predict - real)); mape mean(abs((predict - real)./real)); rmae sqrt(mean((predict - real).^2));可视化部分建议画双Y轴图左轴显示真实值和预测值的折线对比右轴用柱状图显示相对误差这样信息量更密集yyaxis left plot(real,-o); hold on plot(predict,-*) yyaxis right bar(abs(real-predict)./real*100)实测某次运行结果MAPE从12.7%降到8.3%关键参数进化曲线显示在30代后适应度趋于稳定说明算法收敛有效。不过要注意这种玩法比较吃算力100个种群跑50代大概要半小时建议用parfor加速循环。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414112.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!