BP神经网络的数据分类MATLAB源代码.doc
基于遗传算法的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

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神经网络的设计实例例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详细参数基于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代码附录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源程序代码

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编程例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代码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');%把⼆进制转换成对应的类别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
%%%%找出每一类的个体总和。