首页 > 编程知识 正文

神经网络算法基本介绍,BP神经网络

时间:2023-05-04 03:16:23 阅读:143560 作者:389

NaviGAtor BP-networkGA优化BP思路BP创建激活函数设置ga种群初始化适应度函数选择算子交叉算子变异算子CodeGA对比Reference

BP-network

BP网络是前向神经网络中最核心的部分,但存在一些缺陷,存在学习收敛速度慢、无法保证收敛到全局最小点、网络结构不确定等缺点。

GA优化BP构想的主要部分是BP神经网络确定、GA优化权重和阈值、基于BP的训练预测

BPBP创建BP创建一般遵循以下原则

对于常见的模式识别问题,三层网络适用于三层网络,隐层神经元数n 2 n_2 n2和输入层神经元数n 1 n_1 n1近似关系如下:

n2=2n1n_2=2(timesn_1n2=2n1泛化能力设置:以测试样本测试误差的范数作为衡量网络一种泛化能力的标准,根据该误差计算个体适应度值,个体误差范数越小个体适应度值越大

GA种群初始化使用二进制码,由输入层和隐藏层的链路权重、隐藏层权重、隐藏层和输出层权重、输出层权重4部分组成,各自的权重和阈值使用m位二进制码,将所有权值和阈值编码还原为一个个体码

适应度函数采用预测样本预测值和期望值误差矩阵的范数作为目标函数的输出,适应度函数采用排序的适应度分配函数

ftnv=rankIng(obj ) fitNV=ranking(obj ) fitNV=ranking(obj ) ) ) )。

这里,obj是目标函数的输出

算子选择算子使用随机过程采样[sus]

交叉算子使用简单的单点交叉算子

变异算子变异在一定概率下产生变异基因数,采用随机方法选择变异基因,选择基因编码为1则为0,反之为1。

代码% % BP network (未进行ga优化的版本(# ofhiddenlayers 336031 net=feedforwardnet ) ) 31; net.layers {1}.transfer fcn=' log SIG '; % settrainingparametersnet.train param.epochs=1000; net.trainParam.goal=0.01; net.trainParam.lr=0.1; %traintestnetworknet=train(net,p,t ); y=sim(net,P_test ); %% GA-BPcl

c;clear all;close all;load data;nHidden = 31;% max/min value of input vector 输入向量threshold = [0 1; 0 1; 0 1; 0 1; 0 1; 0 1;0 1; 0 1; 0 1;0 1; 0 1; 0 1;0 1; 0 1; 0 1];nInput = size(P, 1); % 输入层的神经元的个数nOutput = size(T, 1); % 隐含层的神经元的个数w1num = nInput*nHidden; % 输入层到隐藏层的权值个数w2num = nOutput*nHidden; % 隐藏层到输出层的权值个数N = w1num+nHidden+w2num+nOutput; % 待优化变量的数量% GA参数NIND = 40; % 种群大小MAXGEN = 50; % 最大遗传代数PRECI = 10; % 个体长度GGAP = 0.95; % 代沟px = 0.7; % 排序pm = 0.1; % 变异概率trace = zeros(N+1, MAXGEN); % 寻优结果FieldD = [repmat(PRECI, 1, N); repmat([-0.5; 0.5], 1, N); repmat([1; 0; 1; 1], 1, N)]; % 区域描述器, Matrix describing the length and how to decode each substring in the chromsome.Chrom = crtbp(NIND, PRECI*N); % 创建初始种群gen = 0;X = bs2rv(Chrom, FieldD); % 初始种群的十进制转换ObjV = Objfunc(X, P, T, nHidden, P_test, T_test);while gen<MAXGEN fprintf('Generation: %dn', gen); FitnV = ranking(ObjV); % 分配适应度值 SelCh = select('sus', Chrom, FitnV, GGAP); % 选择 SelCh = recombin('xovsp', SelCh, px); % 重组 SelCh = mut(SelCh, pm); % 变异 X = bs2rv(SelCh, FieldD); % 子代十进制 ObjVSel = Objfunc(X, P, T, nHidden, P_test, T_test); % 子代目标函数值 [Chrom, ObjV] = reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); % 将子代重插入到父代中,得到新的种群 gen = gen+1; % 获取每代的最优解(Y)以及序号(I) [Y, I] = min(ObjV); trace(1:N, gen) = X(I, :); trace(end, gen)=Y;end%% plot evolutionary figurefigure(1);plot(1:MAXGEN, trace(end, :));grid on;xlabel('Generations of GA');ylabel('Error');title('Process of evolutionary');% output optimized informationbestX = trace(1:end-1, end);bestErr = trace(end, end);%fprintf('Optimal initial weights and threshold:nX= ', num2str(bestX'));fprintf('Minimum Error = %dn', num2str(bestErr));

GA对比 clc;%% 对比使用GA前后的差别%% 使用随机权重和阈值nInput = size(P, 1); % 输入层神经元的个数nOutput = size(T, 1); % 输出层神经元的个数% BPnet = feedforwardnet(nHidden);net = configure(net, P, T); % 配置训练集数据net.layers{2}.transferFcn = 'logsig';% 设置网络参数net.trainParam.epochs = 1000;net.trainParam.goal = 0.01;net.trainParam.lr = 0.1;net.trainParam.showWindow = false;% 训练网络net = train(net, P, T);disp(['1. 使用随机权值和阈值']);Y1 = sim(net, P_test)err1 = norm(Y1-T_test); % 测试样本的仿真误差err11 = norm(sim(net, P)-T); % 训练样本的仿真误差fprintf('Test samples error = %.4fn', err1);fprintf('Train samples error = %.4fn', err11);%% 优化参数% BPnet = feedforwardnet(nHidden);net = configure(net, P, T); % 配置训练集数据net.layers{2}.transferFcn = 'logsig';% 设置网络参数net.trainParam.epochs = 1000;net.trainParam.goal = 0.01;net.trainParam.lr = 0.1;net.trainParam.showWindow = false;w1num = nInput*nHidden;w2num = nOutput*nHidden;w1 = bestX(1:w1num);B1 = bestX(w1num+1:w1num+nHidden);w2 = bestX(w1num+nHidden+1: w1num+nHidden+w2num);B2 = bestX(w1num+nHidden+w2num+1: w1num+nHidden+w2num+nOutput);net.iw{1, 1}=reshape(w1, nHidden, nInput);net.lw{2, 1}=reshape(w2, nOutput, nHidden);net.b{1}=reshape(B1, nHidden, 1);net.b{2} = reshape(B2, nOutput, 1);% trainnet = train(net, P, T);disp(['2. 使用优化后的权值和阈值']);Y2 = sim(net, P_test)err2 = norm(Y2-T_test);err21 = norm(sim(net, P)-T);fprintf('Test samples error = %.4fn', err2);fprintf('Train samples error = %.4fn', err21); Reference

Matlab智能算法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。