BP神经网络的数据分类MATLAB源代码.doc

合集下载

基于遗传算法的BP神经网络MATLAB代码

基于遗传算法的BP神经网络MATLAB代码

基于遗传算法的BP神经网络MATLAB代码以下是基于遗传算法的BP神经网络的MATLAB代码,包括网络初始化、适应度计算、交叉运算、突变操作和迭代训练等。

1.网络初始化:```matlabfunction net = initialize_network(input_size, hidden_size, output_size)net.input_size = input_size;net.hidden_size = hidden_size;net.output_size = output_size;net.hidden_weights = rand(hidden_size, input_size);net.output_weights = rand(output_size, hidden_size);net.hidden_biases = rand(hidden_size, 1);net.output_biases = rand(output_size, 1);end```2.适应度计算:```matlabfunction fitness = calculate_fitness(net, data, labels)output = forward_propagation(net, data);fitness = sum(sum(abs(output - labels)));end```3.前向传播:```matlabfunction output = forward_propagation(net, data)hidden_input = net.hidden_weights * data + net.hidden_biases;hidden_output = sigmoid(hidden_input);output_input = net.output_weights * hidden_output +net.output_biases;output = sigmoid(output_input);endfunction result = sigmoid(x)result = 1 ./ (1 + exp(-x));end```4.交叉运算:```matlabfunction offspring = crossover(parent1, parent2)point = randi([1 numel(parent1)]);offspring = [parent1(1:point) parent2((point + 1):end)]; end```5.突变操作:```matlabfunction mutated = mutation(individual, mutation_rate) for i = 1:numel(individual)if rand < mutation_ratemutated(i) = rand;elsemutated(i) = individual(i);endendend```6.迭代训练:```matlabfunction [best_individual, best_fitness] =train_network(data, labels, population_size, generations, mutation_rate)input_size = size(data, 1);hidden_size = round((input_size + size(labels, 1)) / 2);output_size = size(labels, 1);population = cell(population_size, 1);for i = 1:population_sizepopulation{i} = initialize_network(input_size, hidden_size, output_size);endbest_individual = population{1};best_fitness = calculate_fitness(best_individual, data, labels);for i = 1:generationsfor j = 1:population_sizefitness = calculate_fitness(population{j}, data, labels);if fitness < best_fitnessbest_individual = population{j};best_fitness = fitness;endendselected = selection(population, data, labels);for j = 1:population_sizeparent1 = selected{randi([1 numel(selected)])};parent2 = selected{randi([1 numel(selected)])};offspring = crossover(parent1, parent2);mutated_offspring = mutation(offspring, mutation_rate);population{j} = mutated_offspring;endendendfunction selected = selection(population, data, labels) fitnesses = zeros(length(population), 1);for i = 1:length(population)fitnesses(i) = calculate_fitness(population{i}, data, labels);end[~, indices] = sort(fitnesses);selected = population(indices(1:floor(length(population) / 2)));end```这是一个基于遗传算法的简化版BP神经网络的MATLAB代码,使用该代码可以初始化神经网络并进行迭代训练,以获得最佳适应度的网络参数。

(完整版)BP神经网络matlab实例(简单而经典).doc

(完整版)BP神经网络matlab实例(简单而经典).doc

p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM 算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt); %对 BP 网络进行仿真%还原数据y=anew';1、 BP 网络构建(1)生成 BP 网络net newff ( PR,[ S1 S2...SNl],{ TF1 TF 2...TFNl }, BTF , BLF , PF ) PR :由R 维的输入样本最小最大值构成的R 2 维矩阵。

[ S1 S2...SNl] :各层的神经元个数。

{TF 1 TF 2...TFNl } :各层的神经元传递函数。

BTF :训练用函数的名称。

(2)网络训练[ net,tr ,Y, E, Pf , Af ] train (net, P, T , Pi , Ai ,VV , TV )(3)网络仿真[Y, Pf , Af , E, perf ] sim(net, P, Pi , Ai ,T ){'tansig','purelin'},'trainrp'BP 网络的训练函数训练方法梯度下降法有动量的梯度下降法自适应 lr 梯度下降法自适应 lr 动量梯度下降法弹性梯度下降法训练函数traingd traingdm traingda traingdx trainrpFletcher-Reeves 共轭梯度法traincgf Ploak-Ribiere 共轭梯度法traincgpPowell-Beale 共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlmBP 网络训练参数训练参数net.trainParam.epochsnet.trainParam.goal net.trainParam.lrnet.trainParam.max_fail net.trainParam.min_grad net.trainParam.show net.trainParam.timenet.trainParam.mc net.trainParam.lr_inc 参数介绍最大训练次数(缺省为10)训练要求精度(缺省为0)学习率(缺省为0.01 )最大失败次数(缺省为5)最小梯度要求(缺省为1e-10)显示训练迭代过程( NaN 表示不显示,缺省为 25)最大训练时间(缺省为inf )动量因子(缺省0.9)学习率lr增长比(缺省为1.05)训练函数traingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingdm 、 traingdx traingda 、traingdxnet.trainParam.lr_dec 学习率 lr 下降比(缺省为 0.7) traingda 、 traingdxnet.trainParam.max_perf_inc 表现函数增加最大比(缺省traingda 、 traingdx为 1.04)net.trainParam.delt_inc 权值变化增加量(缺省为trainrp1.2)net.trainParam.delt_dec 权值变化减小量(缺省为trainrp0.5)net.trainParam.delt0 初始权值变化(缺省为 0.07) trainrpnet.trainParam.deltamax 权值变化最大值(缺省为trainrp50.0)net.trainParam.searchFcn 一维线性搜索方法(缺省为traincgf 、traincgp 、traincgb 、srchcha)trainbfg 、 trainossnet.trainParam.sigma 因为二次求导对权值调整的trainscg影响参数(缺省值 5.0e-5)mbda Hessian 矩阵不确定性调节trainscg参数(缺省为 5.0e-7)net.trainParam.men_reduc 控制计算机内存/ 速度的参trainlm量,内存较大设为1,否则设为 2(缺省为 1)net.trainParam.mu 的初始值(缺省为0.001) trainlmnet.trainParam.mu_dec 的减小率(缺省为0.1)trainlmnet.trainParam.mu_inc 的增长率(缺省为10)trainlmnet.trainParam.mu_max 的最大值(缺省为1e10)trainlm2、 BP 网络举例举例 1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用 minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

MATLAB程序代码--BP神经网络的设计实例

MATLAB程序代码--BP神经网络的设计实例

MATLAB程序代码--BP神经网络的设计实例例1 采用动量梯度下降算法训练 BP 网络。

训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为t = [-1 -1 1 1]解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本% P 为输入矢量P=[-1, -2,3,1;-1,1,5, -3];% T 为目标矢量T=[-1, -1, 1, 1];pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd m')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1} layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3; pauseclc% 调用 TRAINGDM 算法训练 BP 网络[net,tr]=train(net,P,T);pauseclc% 对 BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用xx正则化算法提高 BP 网络的推广能力。

BP神经网络matlab详细参数

BP神经网络matlab详细参数

BP神经⽹络matlab详细参数基于matlab BP 神经⽹络参数详解(1)⽣成BP ⽹络(,[1 2...],{ 1 2...},,,)net newff PR S S SNl TF TF TFNl BTF BLF PF =PR :由R 维的输⼊样本最⼩最⼤值构成的2R ?维矩阵。

[1 2...]S S SNl :各层的神经元个数。

{ 1 2...}TF TF TFNl :各层的神经元传递函数。

BTF :训练⽤函数的名称。

(2)⽹络训练[,,,,,] (,,,,,,)net tr Y E Pf Af train net P T Pi Ai VV TV =(3)⽹络仿真[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T =BP ⽹络的训练函数训练⽅法训练函数梯度下降法traingd 有动量的梯度下降法 traingdm ⾃适应lr 梯度下降法traingda⾃适应lr 动量梯度下降法 traingdx 弹性梯度下降法 trainrpFletcher-Reeves 共轭梯度法traincgfPloak-Ribiere 共轭梯度法 traincgp Powell-Beale 共轭梯度法 traincgb 量化共轭梯度法trainscg拟⽜顿算法trainbfg⼀步正割算法trainoss Levenberg-Marquardt trainlmBP⽹络训练参数训练参数参数介绍训练函数net.trainParam.epochs最⼤训练次数(缺省为10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.goal训练要求精度(缺省为0)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.lr学习率(缺省为0.01)traingd、traingdm、traingda、traingdx、trainrp、traincgf、trainscg、trainbfg、trainoss、trainlmnet.trainParam.max_fail最⼤失败次数(缺省为5)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.min_grad最⼩梯度要求(缺省为1e-10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.show显⽰训练迭代过程(NaN表⽰不显⽰,缺省为25)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.time最⼤训练时间(缺省为inf)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm net.trainParam.mc动量因⼦(缺省0.9)traingdm、traingdxnet.trainParam.lr_inc学习率lr增长⽐(缺省为1.05)traingda、traingdxnet.trainParam.lr_dec学习率lr下降⽐(缺省为0.7)traingda、traingdxnet.trainParam.max_perf_inc表现函数增加最⼤⽐(缺省为1.04)net.trainParam.delt_inc权值变化增加量(缺省为1.2)trainrpnet.trainParam.delt_dec权值变化减⼩量(缺省为0.5)trainrpnet.trainParam.delt0初始权值变化(缺省为0.07)trainrpnet.trainParam.deltamax权值变化最⼤值(缺省为50.0)trainrpnet.trainParam.searchFcn⼀维线性搜索⽅法(缺省为srchcha)traincgf、traincgp、traincgb、trainbfg、trainoss net.trainParam.sigma因为⼆次求导对权值trainscg调整的影响参数(缺省值5.0e-5)/doc/cd3ed4b6f5335a8102d220e4.html mbda trainscgHessian矩阵不确定性调节参数(缺省为5.0e-7)net.trainParam.men_redtrainlm控制计算机内存/速uc度的参量,内存较⼤设为1,否则设为2(缺省为1)net.trainParam.mu trainlmµ的初始值(缺省为0.001)net.trainParam.mu_dec trainlmµ的减⼩率(缺省为0.1)net.trainParam.mu_inc trainlmµ的增长率(缺省为10)net.trainParam.mu_max trainlmµ的最⼤值(缺省为1e10)。

BP神经网络预测的matlab代码

BP神经网络预测的matlab代码

BP神经网络预测的matlab代码附录5:BP神经网络预测的matlab代码: P=[ 00.13860.21970.27730.32190.35840.38920.41590.43940.46050.47960.49700.52780.55450.59910.60890.61820.62710.63560.64380.65160.65920.66640.67350.72220.72750.73270.73780.74270.74750.75220.75680.76130.76570.7700]T=[0.4455 0.323 0.4116 0.3255 0.4486 0.2999 0.4926 0.2249 0.48930.2357 0.4866 0.22490.4819 0.2217 0.4997 0.2269 0.5027 0.217 0.5155 0.1918 0.5058 0.2395 0.4541 0.2408 0.4054 0.2701 0.3942 0.3316 0.2197 0.2963 0.5576 0.1061 0.4956 0.267 0.5126 0.2238 0.5314 0.2083 0.5191 0.208 0.5133 0.18480.5089 0.242 0.4812 0.2129 0.4927 0.287 0.4832 0.2742 0.5969 0.24030.5056 0.2173 0.5364 0.1994 0.5278 0.2015 0.5164 0.2239 0.4489 0.2404 0.4869 0.2963 0.4898 0.1987 0.5075 0.2917 0.4943 0.2902 ]threshold=[0 1]net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');net.trainParam.epochs=6000net.trainParam.goal=0.01LP.lr=0.1;net=train(net,P',T')P_test=[ 0.77420.77840.78240.78640.79020.7941 ] out=sim(net,P_test')友情提示:以上面0.7742为例0.7742=ln(47+1)/5因为网络输入有一个元素,对应的是测试时间,所以P只有一列,Pi=log(t+1)/10,这样做的目的是使得这些数据的范围处在[0 1]区间之内,但是事实上对于logsin命令而言输入参数是正负区间的任意值,而将输出值限定于0到1之间。

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码

close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真% 定义训练样本% P为输入矢量P=[0.7317 0.6790 0.5710 0.5673 0.5948;0.6790 0.5710 0.5673 0.5948 0.6292; ... 0.5710 0.5673 0.5948 0.6292 0.6488;0.5673 0.5948 0.6292 0.6488 0.6130; ...0.5948 0.6292 0.6488 0.6130 0.5654; 0.6292 0.6488 0.6130 0.5654 0.5567; ...0.6488 0.6130 0.5654 0.5567 0.5673;0.6130 0.5654 0.5567 0.5673 0.5976; ...0.5654 0.5567 0.5673 0.5976 0.6269;0.5567 0.5673 0.5976 0.6269 0.6274; ...0.5673 0.5976 0.6269 0.6274 0.6301;0.5976 0.6269 0.6274 0.6301 0.5803; ...0.6269 0.6274 0.6301 0.5803 0.6668;0.6274 0.6301 0.5803 0.6668 0.6896; ...0.6301 0.5803 0.6668 0.6896 0.7497];% T为目标矢量T=[0.6292 0.6488 0.6130 0.5654 0.5567 0.5673 0.5976 ...0.6269 0.6274 0.6301 0.5803 0.6668 0.6896 0.7497 0.8094];% Ptest为测试输入矢量Ptest=[0.5803 0.6668 0.6896 0.7497 0.8094;0.6668 0.6896 0.7497 0.8094 0.8722; ...0.6896 0.7497 0.8094 0.8722 0.9096];% Ttest为测试目标矢量Ttest=[0.8722 0.9096 1.0000];% 创建一个新的前向神经网络net=newff(minmax(P'),[12,1],{'logsig','purelin'},'traingdm');% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 5000;net.trainParam.goal = 0.001;% 调用TRAINGDM算法训练 BP 网络[net,tr]=train(net,P',T);% 对BP网络进行仿真A=sim(net,P');figure;plot((1993:2007),T,'-*',(1993:2007),A,'-o');title('网络的实际输出和仿真输出结果,*为真实值,o为预测值');xlabel('年份');ylabel('客运量');% 对BP网络进行测试A1=sim(net,Ptest');figure;plot((2008:2010),Ttest','-*',(2008:2010),A1,'-o');title('测试后网络的实际输出和仿真输出结果,*为真实值,o为预测值'); xlabel('年份');ylabel('客运量');% 计算仿真误差errorE = T - A;MSE=mse(E);figure;plot(1:length(E),E,'-.');title('误差变化图')如有侵权请联系告知删除,感谢你们的配合!。

BP神经网络MATLAB编程代码

BP神经网络MATLAB编程代码

BP神经网络的设计MATLAB编程例1 采用动量梯度下降算法训练 BP 网络。

训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为 t = [-1 -1 1 1]解:本例的 MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本% P 为输入矢量P=[-1, -2, 3, 1; -1, 1, 5, -3];% T 为目标矢量T=[-1, -1, 1, 1];pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 调用 TRAINGDM 算法训练 BP 网络[net,tr]=train(net,P,T);pauseclc% 对 BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用贝叶斯正则化算法提高 BP 网络的推广能力。

matlab训练神经网络分类器方法,用神经网络做训练和分类的matlab代码

matlab训练神经网络分类器方法,用神经网络做训练和分类的matlab代码

matlab训练神经⽹络分类器⽅法,⽤神经⽹络做训练和分类的matlab代码close allclear allclcx=xlsread('training_data.xls',['B2:G401']);y=xlsread('training_data.xls',['I2:K401']);inputs = x';targets = y';% 创建⼀个模式识别⽹络(两层BP⽹络),同时给出中间层神经元的个数,这⾥使⽤20hiddenLayerSize = 20;net = patternnet(hiddenLayerSize);% 对数据进⾏预处理,这⾥使⽤了归⼀化函数(⼀般不⽤修改)% For a list of all processing functions type: help nnprocessnet.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'};% 把训练数据分成三部分,训练⽹络、验证⽹络、测试⽹络% For a list of all data division functions type: help nndividenet.divideFcn = 'dividerand'; % Divide data randomlynet.divideMode = 'sample'; % Divide up every samplenet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100;% 训练函数% For a list of all training functions type: help nntrainnet.trainFcn = 'trainlm'; % Levenberg-Marquardt% 使⽤均⽅误差来评估⽹络% For a list of all performance functions type: help nnperformancenet.performFcn = 'mse'; % Mean squared error% 画图函数% For a list of all plot functions type: help nnplotnet.plotFcns = {'plotperform','plottrainstate','ploterrhist', ...'plotregression', 'plotfit'};% 开始训练⽹络(包含了训练和验证的过程)[net,tr] = train(net,inputs,targets);% 测试⽹络outputs = net(inputs);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs)% 获得训练、验证和测试的结果trainTargets = targets .* tr.trainMask{1};valTargets = targets .* tr.valMask{1};testTargets = targets .* tr.testMask{1};trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs)% 可以查看⽹络的各个参数view(net)% 根据画图的结果,决定是否满意% Uncomment these lines to enable various plots. figure, plotperform(tr)figure, plottrainstate(tr)figure, plotconfusion(targets,outputs)figure, ploterrhist(errors)%如果你对该次训练满意,可以保存训练好⽹络save('training_net.mat','net','tr');下⾯是⽤来分类的代码clear allclose allclcload 'training_net.mat'%% You can change the filename, sheet name, and range %导⼊测试数据new_input = xlsread('new_data.xls',['A2:F25']);new_output = round(net(new_input'));xlswrite('new_data.xls',new_output','result','G2');%把⼆进制转换成对应的类别。

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码)%******************************%学习程序%******************************%%======原始数据输入========p=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;]';%===========期望输出=======t=[4554 2928 3497 2261 6921 1391 3580 4451 2636 3471 3854 3556 2659 ... 4335 2882 4084 1999 2889 2175 2510 3409 3729 3489 3172 4568 4015 ... 3666];ptest=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;4568 4015 3666]';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %将数据归一化NodeNum1 =4; % 隐层第一层节点数NodeNum2=7; % 隐层第二层节点数TypeNum = 5; % 输出维数TF1 = 'tansig';TF2 = 'tansig';TF3 = 'tansig';net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建traingdmnet.trainParam.show=50;net.trainParam.epochs=50000; %训练次数设置net.trainParam.goal=1e-5; %训练所要达到的精度net.trainParam.lr=0.01; %学习速率net.trainParam.mc=0.9;net.trainParam.lr_inc=1.05;net.trainParam.lr_dec=0.7;net.trainParam.max_perf_inc=1.04;net=train(net,pn,tn);p2n=tramnmx(ptest,minp,maxp);%测试数据的归一化an=sim(net,p2n);[a]=postmnmx(an,mint,maxt) %数据的反归一化,即最终想得到的预测结果plot(1:length(ttest),ttest,'o',1:length(ttest),a,'+');title('o表示预测值--- *表示实际值')grid on%m=length(a); %向量a的长度%t1=[t,a(m)];error=ttest-a; %误差向量figureplot(1:length(error),error,'-.')title('误差变化图')grid on[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %½«Êý¾Ý¹éÒ»»¯NodeNum1 =4; % Òþ²ãµÚÒ»²ã½ÚµãÊýNodeNum2=7; % Òþ²ãµÚ¶þ²ã½ÚµãÊýTypeNum = 5; % Êä³öάÊýTF1 = 'tansig';TF2 = 'tansig';TF3 = 'tansig';net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'trainrp');%ÍøÂç´´½¨traingdmnet.trainParam.show=50;net.trainParam.epochs=50000; %ѵÁ·´ÎÊýÉèÖÃnet.trainParam.goal=1e-5; %ѵÁ·ËùÒª´ïµ½µÄ¾«¶Ènet.trainParam.lr=0.01; %ѧϰËÙÂÊ%net.trainParam.mc=0.9;%net.trainParam.lr_inc=1.05;%net.trainParam.lr_dec=0.7;%net.trainParam.max_perf_inc=1.04;%trainrpnet.trainParam.delt_inc=1.2;net.trainParam.delt_dec=0.5;net.trainParam.delta0=0.07;net.trainParam.deltamax=50.0;net=train(net,pn,tn);p2n=tramnmx(p,minp,maxp);%²âÊÔÊý¾ÝµÄ¹éÒ»»¯an=sim(net,p2n);[a]=postmnmx(an,mint,maxt) %Êý¾ÝµÄ·´¹éÒ»»¯ £¬¼´×îÖÕÏëµÃµ½µÄÔ¤²â½á¹ûplot(1:length(t),t,'o',1:length(a),a,'+');title('o±íʾԤ²âÖµ--- *±íʾʵ¼ÊÖµ')grid on%m=length(a); %ÏòÁ¿aµÄ³¤¶È%t1=[t,a(m)];error=t-a; %Îó²îÏòÁ¿figureplot(1:length(error),error,'-.')title('Îó²î±ä»¯Í¼')grid on%输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'%训练函数traingd--梯度下降法,有7个训练参数.%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05;% lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda 的4个附加参数%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数:% delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);% delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0) % 适合大型网络%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;%训练函数traincgb--Powell-Beale共轭梯度法%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr%训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络% 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);% lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)% 缺少1个训练参数:lr%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络net=init(net);net.trainparam.epochs=20000; %最大训练次数(前缺省为10,自trainrp后,缺省为100) net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=25; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-8; %训练要求精度(缺省为0)%net.trainparam.max_fail 最大失败次数(缺省为5)%net.trainparam.min_grad 最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6) %net.trainparam.time 最大训练时间(缺省为inf)[net,tr]=train(net,P,t); %网络训练a=sim(net,H) %网络仿真。

BP神经网络的设计实例(MATLAB编程)

BP神经网络的设计实例(MATLAB编程)

神经网络的设计实例(MATLAB编程)例1 采用动量梯度下降算法训练BP 网络。

训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为t = [-1 -1 1 1]解:本例的MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对BP 神经网络进行训练% SIM——对BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本P=[-1, -2, 3, 1; -1, 1, 5, -3]; % P 为输入矢量T=[-1, -1, 1, 1]; % T 为目标矢量pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') % 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 调用TRAINGDM 算法训练BP 网络[net,tr]=train(net,P,T);pauseclc% 对BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用贝叶斯正则化算法提高BP 网络的推广能力。

在本例中,我们采用两种训练方法,即L-M 优化算法(trainlm)和贝叶斯正则化算法(trainbr),用以训练BP 网络,使其能够拟合某一附加有白噪声的正弦样本数据。

BP神经网络实验-Matlab

BP神经网络实验-Matlab

BP神经网络实验-MatlabBP神经网络是一种常见的人工神经网络模型。

在实际应用中,BP神经网络广泛用于分类、预测、优化等任务中。

本文将介绍如何在Matlab中实现BP神经网络,并通过一个简单的分类问题进行实验验证。

1. 数据准备首先,我们需要准备数据。

本文采用的数据是一个二分类问题,即在一个二维平面中,将数据点分为两类。

为了方便起见,我们可以手动生成一些数据点,或者使用Matlab自带的数据集如“fisheriris”。

2. BP神经网络模型的构建在Matlab中,我们可以使用“newff”函数来构建BP神经网络模型。

该函数可以接受多个参数,包括输入层、隐含层和输出层的节点数量,以及激活函数、学习算法等参数。

以下是构建一个包含1个输入层、1个隐含层和1个输出层的BP神经网络的示例代码:4. BP神经网络模型的测试在训练完成后,我们可以使用BP神经网络模型对测试数据进行分类预测。

在Matlab 中,我们可以使用“sim”函数来预测分类结果。

以下是对测试数据进行分类预测的示例代码:output=round(sim(net,test_data));其中,“output”是分类预测结果;“test_data”是测试数据。

5. 性能评估最后,我们需要对BP神经网络模型的分类性能进行评估。

在Matlab中,我们可以使用“confusionmat”函数来计算分类矩阵,进而计算分类准确率等性能指标。

以下是计算分类准确率的示例代码:[C,order]=confusionmat(test_label,output);accuracy=(C(1,1)+C(2,2))/sum(sum(C));其中,“C”是分类矩阵;“order”是分类标签;“accuracy”是分类准确率。

BP神经网络matlab实例(简单而经典)(完整资料).doc

BP神经网络matlab实例(简单而经典)(完整资料).doc

【最新整理,下载后即可编辑】p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络,minmax(pn)找到pn 矩阵的最大最小值net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络net newff PR S S SNl TF TF TFNl BTF BLF PF=(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。

S S SNl:各层的神经元个数。

[ 1 2...]TF TF TFNl:各层的神经元传递函数。

{ 1 2...}BTF:训练用函数的名称。

(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真=Y Pf Af E perf sim net P Pi Ai T[,,,,] (,,,,){'tansig','purelin'},'trainrp'BP网络训练参数举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');%minmax(P)取P的最大最小值;[5,1]第一次神经元5个,第二层1个;'tansig','purelin'神经网络第一层和第二层的转移函数;'trainrp'网络训练函数。

BP神经网络的MATLAB语法介绍

BP神经网络的MATLAB语法介绍

BP神经网络的MATLAB语法介绍BP神经网络(Back Propagation Neural Network)是一种常用的人工神经网络算法,其目的是通过反向传播算法来训练网络模型,实现模式识别和函数逼近等任务。

在MATLAB中,可以使用Neural Network Toolbox来实现BP神经网络模型的构建和训练。

本文将介绍BP神经网络的MATLAB语法,包括网络的构建、训练、预测和模型评估等方面。

一、网络构建1.网络结构定义在MATLAB中,可以使用feedforwardnet函数来定义BP神经网络的结构。

该函数有两个参数,第一个参数是一个向量,表示每一层的节点数;第二个参数是一个向量,表示每一层的传输函数。

例如,下面的代码定义了一个具有2个输入节点、10个隐藏节点和1个输出节点的BP神经网络:```net = feedforwardnet([2, 10, 1]);```2.网络参数初始化网络参数初始化可以使用init函数,其参数是一个BP神经网络对象。

例如,下面的代码将使用init函数来初始化上一步中定义的网络对象:```net = init(net);```二、训练网络1.数据准备在训练BP神经网络之前,需要将数据集划分为输入和输出,然后进行数据归一化处理。

在MATLAB中,可以使用mat2cell函数将数据集划分为输入和输出集合,使用mapminmax函数来归一化数据。

例如,下面的代码将数据集划分为输入集合和输出集合,并进行数据归一化处理:```inputs = mat2cell(data(:, 1:end-1)', size(data, 2)-1,ones(size(data, 1), 1));outputs = mat2cell(data(:, end)', ones(size(data, 1), 1), 1);[input, inputPS] = mapminmax(cat(2, inputs{:}));[output, outputPS] = mapminmax(cat(2, outputs{:}));```2.训练参数设置在训练BP神经网络之前,需要设置一些训练参数,例如训练算法和最大训练次数。

数据预测之BP神经网络具体应用以及matlab代码

数据预测之BP神经网络具体应用以及matlab代码

数据预测之BP神经网络具体应用以及matlab代码2013-12-25 17:17 2467人阅读评论(0) 收藏举报1.具体应用实例。

根据表2,预测序号15的跳高成绩。

表2 国内男子跳高运动员各项素质指标4.4 (序号15)跳高成绩预测4.4.1 数据整理1)我们将前14组国内男子跳高运动员各项素质指标作为输入,即(30m行进跑,立定三级跳远,助跑摸高,助跑4-6步跳高,负重深蹲杠铃,杠铃半蹲系数,100m,抓举),将对应的跳高成绩作为输出。

并用matlab自带的premnmx()函数将这些数据归一化处理。

数据集:(注意:每一列是一组输入训练集,行数代表输入层神经元个数,列数输入训练集组数)P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;140 120 140 150 80 130 130 100 130 140 115 80 90 130;2.83.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.74.6;11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;50 70 50 80 50 60 65 40 65 50 50 50 70 70];T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];4.4.2 模型建立4.4.2.1 BP网络模型BP网络(Back-ProPagation Network)又称反向传播神经网络,通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。

BP神经网络的数据分类_MATLAB源代码

BP神经网络的数据分类_MATLAB源代码

%%%清除空间clcclear all ;close all ;%%%训练数据预测数据提取以及归一化%%%下载四类数据load data1 c1load data2 c2load data3 c3load data4 c4%%%%四个特征信号矩阵合成一个矩阵data ( 1:500 , : ) = data1 ( 1:500 , :) ;data ( 501:1000 , : ) = data2 ( 1:500 , : ) ;data ( 1001:1500 , : ) = data3 ( 1:500 , : ) ;data ( 1501:2000 , : ) = data4 ( 1:500 , : ) ;%%%%%%从1到2000间的随机排序k = rand ( 1 , 2000 ) ;[ m , n ] = sort ( k ) ; %%m为数值,n为标号%%%%%%%%%%%输入输出数据input = data ( : , 2:25 ) ;output1 = data ( : , 1) ;%%%%%%把输出从1维变到4维for i = 1 : 1 :2000switch output1( i )case 1output( i , :) = [ 1 0 0 0 ] ;case 2output( i , :) = [ 0 1 0 0 ] ;case 3output( i , :) = [ 0 0 1 0 ] ;case 4output( i , :) = [ 0 0 0 1 ] ;endend%%%%随机抽取1500个样本作为训练样本,500个样本作为预测样本input_train = input ( n( 1:1500 , : ) )’ ;output_train = output ( n( 1:1500 , : ) )’ ;input_test = input ( n( 1501:2000 , : ) )’ ;output_test = output ( n( 1501:2000 , : ) )’ ;%%%%输入输出数据归一化[ inputn , inputps ] = mapminmax ( input_train ) ;%%%网络结构初始化innum = 24 ; %输入层midnum = 25 ; %隐含层outnum = 4 ; %输出层%权值初始化w1 = rands ( midnum , innum ) ;b1 = rands ( midnum , 1 ) ;w2 = rands ( midnum , outnum ) ;b2 = rands ( outnum , 1) ;w2_1 = w2 ; w2_2 = w2_1 ;w1_1 = w1 ; w1_2 = w1_1 ;b1_1 = b1 ; b1_2 = b1_1 ;b2_1 = b2 ; b2_2 = b2_1 ;%%%学习速率xite = 0.1 ;alfa = 0.01 ;%%%%%网络训练for ii = 1:10E( ii ) = 0 ;for i = 1:1:1500 ;%%网络预测输出x = inputn ( : , j ) ;%%%隐含层输出for j = 1:1:midnuml (j) = inputn ( : , i )’*w1( j , :)’ + b1 (j) ;lout (j) = 1/( 1 +exp( -1(j) ) ) ;end%%%%输出层输出yn = w2’ * lout’ + b2 ;%%%权值阈值修正%计算权值变化率dw2 = e * lout ;db2 = e’ ;for j = 1:1:midnumS= 1/(1 + exp ( -l(j) ) ) ;Fl (j) = S * ( 1- S) ;endfor k = 1:1:innumfor j = 1:1:midnumdw1( k, j ) = Fl (j) * x (k) *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ; db1( j ) = Fl (j) * *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;endendw1=w1_1+xite*dw1';b1=b1_1+xite*db1';w2=w2_1+xite*dw2';b2=b2_1+xite*db2';w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%%%%语音特征信号分类input_test = mapminmax ( ‘apply’ , input_test , inputps ); for ii = 1:1for i = 1:500%隐含层输出for j = 1:1:midnuml (j) = input_te st ( : , i )’ * w1( j , : )’ + b1(j) ;lout ( j ) = 1/ ( 1 + exp( -l(j) ) ) ;endfore( :,i ) = w2’ * lout’ + b2 ;endend%%%结果分析%%%%根据网络输出找出数据属于哪类for i = 1:500output_fore (i) = find ( fore (:,i) = =max (fore(:,i) ) ) ; end%%%%%BP网络预测输出error = output_fore - output1 ( n( 1501:2000) )’ ;%%画出分类图figure (1)plot ( output_fore , ‘r’ )hold onplot (output1( n (1501:2000))’ , ‘b’ ) ;legend ( ‘预测语音类别’, ‘实际语音类别’) %%%画出误差图figure (2)plot (error)title ( ‘BP网络分类误差’, ‘fontsize’, 12 ) xlabel ( ‘语音信号’, ‘fontsize’, ‘12’) ylabel ( ‘分类误差’, ‘fontsize’, 12 ) %%%%%找出属于哪种类型for i = 1:500if error (i) ~= 0[ b,c ] = max (output_test( :,i ) );switch ccase 1k(1) = k(1) + 1 ;case 2k(2) = k(2) + 1 ;case 3k(3) = k(3) + 1 ;case 4k(4) = k(4) + 1 ;endendend%%%%找出每一类的个体总和kk = zeros ( 1,4 )for i = 1:500[ b,c ] = max ( output_test( :,i) ) ; switch ccase 1kk(1) = kk(1) + 1 ;case 2kk(2) = kk(2) + 1 ;case 3kk(3) = kk(3) + 1 ;case 4kk(4) = kk(4) + 1 ;endend%%%正确率nightridio = ( kk - k )./ kk。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%%%清除空间
clc
clear all ;
close all ;
%%%训练数据预测数据提取以及归一化
%%%下载四类数据
load data1 c1
load data2 c2
load data3 c3
load data4 c4
%%%%四个特征信号矩阵合成一个矩阵data ( 1:500 , : ) = data1 ( 1:500 , :) ;
data ( 501:1000 , : ) = data2 ( 1:500 , : ) ; data ( 1001:1500 , : ) = data3 ( 1:500 , : ) ; data ( 1501:2000 , : ) = data4 ( 1:500 , : ) ;
%%%%%%从1到2000间的随机排序
k = rand ( 1 , 2000 ) ;
[ m , n ] = sort ( k ) ; %%m为数值,n为标号
%%%%%%%%%%%输入输出数据
input = data ( : , 2:25 ) ;
output1 = data ( : , 1) ;
%%%%%%把输出从1维变到4维
for i = 1 : 1 :2000
switch output1( i )
case 1
output( i , :) = [ 1 0 0 0 ] ;
case 2
output( i , :) = [ 0 1 0 0 ] ;
case 3
output( i , :) = [ 0 0 1 0 ] ;
case 4
output( i , :) = [ 0 0 0 1 ] ;
end
end
%%%%随机抽取1500个样本作为训练样本,500个样本作为预测样本
input_train = input ( n( 1:1500 , : ) )’ ;
output_train = output ( n( 1:1500 , : ) )’ ;
input_test = input ( n( 1501:2000 , : ) )’ ;
output_test = output ( n( 1501:2000 , : ) )’ ; %%%%输入输出数据归一化
[ inputn , inputps ] = mapminmax ( input_train ) ;
%%%网络结构初始化
innum = 24 ; %输入层
midnum = 25 ; %隐含层
outnum = 4 ; %输出层
%权值初始化
w1 = rands ( midnum , innum ) ;
b1 = rands ( midnum , 1 ) ;
w2 = rands ( midnum , outnum ) ;
b2 = rands ( outnum , 1) ;
w2_1 = w2 ; w2_2 = w2_1 ;
w1_1 = w1 ; w1_2 = w1_1 ;
b1_1 = b1 ; b1_2 = b1_1 ;
b2_1 = b2 ; b2_2 = b2_1 ;
%%%学习速率
xite = 0.1 ;
alfa = 0.01 ;
%%%%%网络训练
for ii = 1:10
E( ii ) = 0 ;
for i = 1:1:1500 ;
%%网络预测输出
x = inputn ( : , j ) ;
%%%隐含层输出
for j = 1:1:midnum
l (j) = inputn ( : , i )’*w1( j , : )’ + b1 (j) ;
lout (j) = 1/( 1 +exp( -1(j) ) ) ;
end
%%%%输出层输出
yn = w2’ * lout’ + b2 ;
%%%权值阈值修正
%计算权值变化率
dw2 = e * lout ;
db2 = e’ ;
for j = 1:1:midnum
S= 1/(1 + exp ( -l(j) ) ) ;
Fl (j) = S * ( 1- S) ;
end
for k = 1:1:innum
dw1( k, j ) = Fl (j) * x (k) *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;
db1( j ) = Fl (j) * *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;
end
end
w1=w1_1+xite*dw1';
b1=b1_1+xite*db1';
w2=w2_1+xite*dw2';
b2=b2_1+xite*db2';
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
b1_2=b1_1;b1_1=b1;
b2_2=b2_1;b2_1=b2;
end
end
%%%%语音特征信号分类
input_test = mapminmax ( ‘apply’ , input_test , inputps ); for ii = 1:1
for i = 1:500
%隐含层输出
l (j) = input_test ( : , i )’ * w1( j , : )’ + b1(j) ;
lout ( j ) = 1/ ( 1 + exp( -l(j) ) ) ;
end
fore( :,i ) = w2’ * lout’ + b2 ;
end
end
%%%结果分析
%%%%根据网络输出找出数据属于哪类
for i = 1:500
output_fore (i) = find ( fore (:,i) = =max (fore(:,i) ) ) ; end
%%%%%BP网络预测输出
error = output_fore - output1 ( n( 1501:2000) )’ ;
%%画出分类图
figure (1)
plot ( output_fore , ‘r’ )
hold on
plot (output1( n (1501:2000))’ , ‘b’ ) ;
legend ( ‘预测语音类别’ , ‘实际语音类别’ )
%%%画出误差图
figure (2)
plot (error)
title ( ‘BP网络分类误差’ , ‘fontsize’ , 12 ) xlabel ( ‘语音信号’ , ‘fontsize’ , ‘12’ ) ylabel ( ‘分类误差’ , ‘fontsize’ , 12 ) %%%%%找出属于哪种类型
for i = 1:500
if error (i) ~= 0
[ b,c ] = max (output_test( :,i ) );
switch c
case 1
k(1) = k(1) + 1 ;
case 2
k(2) = k(2) + 1 ;
case 3
k(3) = k(3) + 1 ;
case 4
k(4) = k(4) + 1 ;
end
end
end
%%%%找出每一类的个体总和。

相关文档
最新文档