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

合集下载

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。

基于遗传算法的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应用

BP神经网络原理及其MATLAB应用

BP神经网络原理及其MATLAB应用BP神经网络(Back Propagation Neural Network)是一种基于梯度下降算法的人工神经网络模型,具有较广泛的应用。

它具有模拟人类神经系统的记忆能力和学习能力,可以用来解决函数逼近、分类和模式识别等问题。

本文将介绍BP神经网络的原理及其在MATLAB中的应用。

BP神经网络的原理基于神经元间的权值和偏置进行计算。

一个标准的BP神经网络通常包含三层:输入层、隐藏层和输出层。

输入层负责接收输入信息,其节点数与输入维度相同;隐藏层用于提取输入信息的特征,其节点数可以根据具体问题进行设定;输出层负责输出最终的结果,其节点数根据问题的要求决定。

BP神经网络的训练过程可以分为前向传播和反向传播两个阶段。

前向传播过程中,输入信息逐层传递至输出层,通过对神经元的激活函数进行计算,得到神经网络的输出值。

反向传播过程中,通过最小化损失函数的梯度下降算法,不断调整神经元间的权值和偏置,以减小网络输出与实际输出之间的误差,达到训练网络的目的。

在MATLAB中,可以使用Neural Network Toolbox工具箱来实现BP神经网络。

以下是BP神经网络在MATLAB中的应用示例:首先,需导入BP神经网络所需的样本数据。

可以使用MATLAB中的load函数读取数据文件,并将其分为训练集和测试集:```data = load('dataset.mat');inputs = data(:, 1:end-1);targets = data(:, end);[trainInd, valInd, testInd] = dividerand(size(inputs, 1), 0.6, 0.2, 0.2);trainInputs = inputs(trainInd, :);trainTargets = targets(trainInd, :);valInputs = inputs(valInd, :);valTargets = targets(valInd, :);testInputs = inputs(testInd, :);testTargets = targets(testInd, :);```接下来,可以使用MATLAB的feedforwardnet函数构建BP神经网络模型,并进行网络训练和测试:```hiddenLayerSize = 10;net = feedforwardnet(hiddenLayerSize);net = train(net, trainInputs', trainTargets');outputs = net(testInputs');```最后,可以使用MATLAB提供的performance函数计算网络的性能指标,如均方误差、相关系数等:```performance = perform(net, testTargets', outputs);```通过逐步调整网络模型的参数和拓扑结构,如隐藏层节点数、学习率等,可以进一步优化BP神经网络的性能。

MATLAB程序代码 bp神经网络通用代码

MATLAB程序代码 bp神经网络通用代码

实用标准文案MATLAB程序代码--bp神经网络通用代码matlab通用神经网络代码学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下,希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享感应器神经网络、线性网络、BP神经网络、径向基函数网络%通用感应器神经网络。

P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量T=[1 1 0 0 1];%期望输出plotpv(P,T);%描绘输入点图像net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold onlinehandle=plotpc(net.iw{1},net.b{1});net.adaptparam.passes=3;for a=1:25%训练次数[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.iw{1},net.b{1},linehandle);drawnow;end%通用newlin程序%通用线性网络进行预测time=0:0.025:5;T=sin(time*4*pi);Q=length(T);P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。

精彩文档.实用标准文案P(1,2:Q)=T(1,1:(Q-1));P(2,3:Q)=T(1,1:(Q-2));P(3,4:Q)=T(1,1:(Q-3));P(4,5:Q)=T(1,1:(Q-4));P(5,6:Q)=T(1,1:(Q-5));plot(time,T)%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);%网络测试figure(2)plot(time,a,time,T,'+')xlabel('时间');ylabel('输出-目标+');title('输出信号和目标信号');e=T-a;figure(3)plot(time,e)hold onplot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')代替hold offxlabel('时间');ylabel('误差');精彩文档.实用标准文案title('误差信号');%通用BP神经网络P=[-1 -1 2 2;0 5 0 5];t=[-1 -1 1 1];net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd');%输入参数依次为:'样本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=300; %最大训练次数(前缺省为10,自trainrp后,缺省为100)net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=50; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-5; %训练要求精度(缺省为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,P) %网络仿真%通用径向基函数网络——%其在逼近能力,分类能力,学习速度方面均优于BP神经网络%在径向基网络中,径向基层的散步常数是spread的选取是关键%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1%可以通过net=newrbe(P,T,spread)生成网络,且误差为0%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止%GRNN网络,迅速生成广义回归神经网络(GRNN)P=[4 5 6];T=[1.5 3.6 6.7];精彩文档.实用标准文案net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)%PNN网络,概率神经网络P=[0 0 ;1 1;0 3;1 4;3 1;4 1;4 3]';Tc=[1 1 2 2 3 3 3];%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=[1 4;0 1;5 2]';Y=sim(net,P2);Yc=vec2ind(Y)%应用newrb()函数构建径向基网络,对一系列数据点进行函数逼近P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.500 -0.3930 -0.1647 -0.0988...0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];%绘制训练用样本的数据点plot(P,T,'r*');title('训练样本');精彩文档.实用标准文案xlabel('输入向量P');ylabel('目标向量T');%设计一个径向基函数网络,网络有两层,隐层为径向基神经元,输出层为线性神经元%绘制隐层神经元径向基传递函数的曲线p=-3:.1:3;a=radbas(p);plot(p,a)title('径向基传递函数')xlabel('输入向量p')%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数%例如a2=radbas(p-1.5);a3=radbas(p+2);a4=a+a2*1.5+a3*0.5;plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--')title('径向基传递函数权值之和')xlabel('输入p');ylabel('输出a');%应用newrb()函数构建径向基网络的时候,可以预先设定均方差精度eg以及散布常数sceg=0.02;sc=1; %其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试精彩文档.实用标准文案plot(P,T,'*')xlabel('输入');X=-1:.01:1;Y=sim(net,X);hold onplot(X,Y);hold offlegend('目标','输出')%应用grnn进行函数逼近P=[1 2 3 4 5 6 7 8];T=[0 1 2 3 2 1 2 1];plot(P,T,'.','markersize',30)axis([0 9 -1 4])title('待逼近函数')xlabel('P')ylabel('T')%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);hold onoutputline=plot(P,A,'o','markersize',10,'color',[1 0 0]);精彩文档.实用标准文案title('检测网络')xlabel('P')ylabel('T和A')%应用pnn进行变量的分类P=[1 2;2 2;1 1]; %输入向量Tc=[1 2 3]; %P对应的三个期望输出%绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Tc(i)))endaxis([0 3 0 3]);title('三向量及其类别')xlabel('P(1,:)')ylabel('P(2,:)')%网络设计T=ind2vec(Tc);spread=1;net=newgrnn(P,T,speard);%网络测试A=sim(net,P);Ac=vec2ind(A);%绘制输入向量及其相应的网络输出plot(P(1,:),P(2,:),'.','markersize',30)精彩文档.实用标准文案for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i)))endaxis([0 3 0 3]);title('网络测试结果')xlabel('P(1,:)')ylabel('P(2,:)')P=[13, 0, 1.119, 1, 26.3;22, 0, 1.135, 1, 26.3;-15, 0, 0.9017, 1, 20.4;-30, 0, 0.9172, 1, 26.7;24,0,1.238,0.9704,28.2;3,24,1.119,1,26.3;0,52,1.089,1,26.3;0,-73,1.0889,1,26.3;1,28,0.8748,1,2 6.3;-1,-39,1.1168,1,26.7;-2, 0, 1.495, 1, 26.3;0, -1, 1.438, 1, 26.3;4, 1,0.4964,0.9021, 26.3;3, -1, 0.5533, 1.2357, 26.7;-5, 0, 1.7368, 1, 26.7;1, 0, 1.1045, 0.0202,26.3;-2, 0, 1.1168, 1.3764, 26.7;-3, -1, 1.1655, 1.4418,27.5;3, 2, 1.0875, 0.748, 27.5;-3, 0, 1.1068, 2.2092, 26.3;4, 1, 0.9017, 1, 13.7;3, 2, 0.9017, 1, 14.9;-3, 1, 0.9172, 1, 13.7;-2, 0, 1.0198, 1.0809, 16.1;0, 1, 0.9172, 1, 13.7]T=[1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1 ];%期望输出plotpv(P,T);%描绘输入点图像精彩文档.。

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 网络的推广能力。

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实现)

BP神经网络实验详解(MATLAB实现)BP(Back Propagation)神经网络是一种常用的人工神经网络结构,用于解决分类和回归问题。

在本文中,将详细介绍如何使用MATLAB实现BP神经网络的实验。

首先,需要准备一个数据集来训练和测试BP神经网络。

数据集可以是一个CSV文件,每一行代表一个样本,每一列代表一个特征。

一般来说,数据集应该被分成训练集和测试集,用于训练和测试模型的性能。

在MATLAB中,可以使用`csvread`函数来读取CSV文件,并将数据集划分为输入和输出。

假设数据集的前几列是输入特征,最后一列是输出。

可以使用以下代码来实现:```matlabdata = csvread('dataset.csv');input = data(:, 1:end-1);output = data(:, end);```然后,需要创建一个BP神经网络模型。

可以使用MATLAB的`patternnet`函数来创建一个全连接的神经网络模型。

该函数的输入参数为每个隐藏层的神经元数量。

下面的代码创建了一个具有10个隐藏神经元的单隐藏层BP神经网络:```matlabhidden_neurons = 10;net = patternnet(hidden_neurons);```接下来,需要对BP神经网络进行训练。

可以使用`train`函数来训练模型。

该函数的输入参数包括训练集的输入和输出,以及其他可选参数,如最大训练次数和停止条件。

下面的代码展示了如何使用`train`函数来训练模型:```matlabnet = train(net, input_train, output_train);```训练完成后,可以使用训练好的BP神经网络进行预测。

可以使用`net`模型的`sim`函数来进行预测。

下面的代码展示了如何使用`sim`函数预测测试集的输出:```matlaboutput_pred = sim(net, input_test);```最后,可以使用各种性能指标来评估预测的准确性。

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神经网络是一个前向网络,它利用误差反向传播算法对网络进行训练,结构简单,可塑性强。

本例选择3层BP神经网络(隐层为1层)来逼近函数,单输入单输出,隐层包含7个神经元,预设精度为0.1,学习率设为0.1,循环次数为5000次,达到循环次数,或结果达到预设精度要求,结束计算。

激活函数选择双曲函数,采用梯度下降法,通过神经元的输入和误差,以及权值的学习速率来计算权值的变化率。

将输入提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,输出层的神经元获得网络的输入相应。

接下来,按照减少目标输出与实际输出之间误差的方向,从输出层反向经过中间层回到输入层,从而逐层修正各连接权值。

随着误差逆向的传播修正不断进行,网络对输入响应的正确率也不断上升。

程序结果:050010001500200025003000350040004500-0.500.51图一为误差曲线,图二为验证结果由图可见:当输入样本samplelist=-0.5:0.05:0.45时,网络经过5000次的循环计算,误差几乎为0.验证数据的输入样本为:-0.48:0.05:1。

可以发现在输入小于0时,期望的输出值和通过神经网络得到的输出值偏差较大,但当输入大于0时,偏差逐渐减小,输入大于0.5时,偏差基本为0。

分析原因,可能是因为隐层数目较少,隐层神经元数目选择不当造成。

Matlab程序如下(附详细注释):clear all%********预设各个参数大小和存储空间********inputnums=1;%输入层节点为1outputnums=1;%输出层节点为1hidenums=7;%隐层节点为7maxcount=5000;%最大迭代次数samplenum=19;%一个计数器,无意义precision=0.1;%预设精度alpha=0.01;%学习率设定值error=zeros(1,maxcount+1);%error数组初始化,目的是预分配内存空间errorp=zeros(1,samplenum);%同上v=rand(inputnums,hidenums);%1*7;v初始化为一个1*7的随机归一矩阵;v表输入层到隐层的权值deltv=zeros(inputnums,hidenums);%1*7;内存空间预分配dv=zeros(inputnums,hidenums);%1*7;w=rand(hidenums,outputnums);%7*1;隐层到输出层的权值deltw=zeros(hidenums,outputnums);%7*1dw=zeros(hidenums,outputnums);%7*1samplelist=-0.5:0.05:0.45;%输入数据expectlist=exp(-1.9.*(samplelist+0.5)).*sin(10.*samplelist); %期望输出[samplelist,minp,maxp]=premnmx(samplelist);%输入数据预处理%************BP神经网络循环调整权值*************count=1;while(count<=maxcount)%结束条件1迭代5000次c=1;while(c<=samplenum)for k=1:outputnumsd(k)=expectlist(c);%获得期望输出的向量endfor i=1:inputnumsx(i)=samplelist(c);%获得输入的向量数据end%******前向计算**********;for j=1:hidenumsnet=0.0;for i=1:inputnumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和∑X(i)V(i)endy(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endfor k=1:outputnumsnet=0.0;for j=1:hidenumsnet=net+y(j)*w(j,k);endo(k)=1/(1+exp(-net));%计算获得的输出值end%********反向计算,修改权值*******errortmp=0.0;for k=1:outputnumserrortmp=errortmp+(d(k)-o(k))^2;%第一组训练后的误差计算errorp(c)=0.5*errortmp;%误差E=∑(d(k)-o(k))^2 * 1/2%end%****backward()********;for k=1:outputnumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%输出层误差偏导endfor j=1:hidenumstem=0.0;for k=1:outputnumstem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的求和endyitay(j)=tem*y(j)*(1-y(j));%隐层偏导end%******调整各层权值********for j=1:hidenumsfor k=1:outputnumsdeltw(j,k)=alpha*yitao(k)*y(j);%权值w的调整量deltw(已乘学习率) w(j,k)=w(j,k)+deltw(j,k);%权值调整endendfor i=1:inputnumsfor j=1:hidenumsdeltv(i,j)=alpha*yitay(j)*x(i);%同上deltwv(i,j)=v(i,j)+deltv(i,j);endendc=c+1;end %第二个while结束;表示一次BP训练结束double tmp;for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if(error(count)<precision)%误差是否达到精度要求break;endcount=count+1;%训练次数加1end%第一个while结束%*****用其他的数据验证********error(maxcount+1)=error(maxcount);z=1:count-1;p=-0.48:0.05:1;%验证输入数据t=exp(-1.9.*(p+0.5)).*sin(10.*p)[pn,minpn,maxpn]=premnmx(p);simt=zeros(1,30);%while(a<=19)for i=1:30x=p(i);%获得输入的向量数据for j=1:hidenumsnet=0.0;net=net+x*v(1,j);%输入层到隐层的加权和y(j)=1/(1+exp(-net)); %输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endnet=0.0;for k=1:hidenumsnet=net+y(k)*w(k,1);endo=1/(1+exp(-net));simt(i)=o;endsubplot(2,1,1);plot(z,error(z),'-');subplot(2,1,2);plot(p,t,'*',p,simt,'-'); grid on。

BP神经网络matlab详细参数

BP神经网络matlab详细参数

基于matlab 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...]{ 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弹性梯度下降法trainrptraincgfFletcher-Reeves共轭梯度法Ploak-Ribiere共轭梯度法traincgpPowell-Beale共轭梯度法traincgb量化共轭梯度法trainscg拟牛顿算法trainbfg一步正割算法trainoss Levenberg-Marquardt trainlmBP网络训练参数训练参数参数介绍训练函数net.trainParam.epochs最大训练次数(缺省为10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.goal训练要求精度(缺省为0)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.lr学习率(缺省为0.01)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.max_fail最大失败次数(缺省为5)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.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)traingda、traingdxnet.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、trainossnet.trainParam.sigma因为二次求导对权值trainscg调整的影响参数(缺省值5.0e-5)mbdatrainscgHessian矩阵不确定性调节参数(缺省为5.0e-7)net.trainParam.men_redtrainlm控制计算机内存/速uc度的参量,内存较大设为1,否则设为2(缺省为1)net.trainParam.mutrainlmμ的初始值(缺省为0.001)net.trainParam.mu_dectrainlmμ的减小率(缺省为0.1)net.trainParam.mu_inctrainlmμ的增长率(缺省为10)net.trainParam.mu_maxtrainlmμ的最大值(缺省为1e10)。

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

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神经网络算法代码

BP神经网络算法代码

BP神经网络算法代码以下是一个简单实现的BP神经网络算法代码,实现了一个简单的二分类任务。

代码主要分为四个部分:数据准备、网络搭建、训练和预测。

```pythonimport numpy as np#数据准备def prepare_data(:X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # 输入数据return X, y#网络搭建def build_network(X, y, hidden_dim):input_dim = X.shape[1] # 输入维度output_dim = y.shape[1] # 输出维度#初始化权重和偏置np.random.seed(0)W1 = np.random.randn(input_dim, hidden_dim) /np.sqrt(input_dim)b1 = np.zeros((1, hidden_dim))W2 = np.random.randn(hidden_dim, output_dim) / np.sqrt(hidden_dim)b2 = np.zeros((1, output_dim))return W1, b1, W2, b2#前向传播def forward_propagation(X, W1, b1, W2, b2):z1 = np.dot(X, W1) + b1a1 = sigmoid(z1)z2 = np.dot(a1, W2) + b2a2 = sigmoid(z2)return a1, a2#激活函数def sigmoid(x):return 1 / (1 + np.exp(-x))#反向传播def backward_propagation(X, y, a1, a2, W1, W2): m = X.shape[0] # 样本数量#计算损失loss = np.sum((a2-y)**2) / (2*m)#计算梯度delta2 = 1/m * (a2-y) * a2 * (1-a2)dW2 = np.dot(a1.T, delta2)db2 = np.sum(delta2, axis=0, keepdims=True)delta1 = np.dot(delta2, W2.T) * a1 * (1-a1)dW1 = np.dot(X.T, delta1)db1 = np.sum(delta1, axis=0)return loss, dW1, db1, dW2, db2#更新参数def update_parameters(W1, b1, W2, b2, dW1, db1, dW2, db2, learning_rate):W1 -= learning_rate * dW1b1 -= learning_rate * db1W2 -= learning_rate * dW2b2 -= learning_rate * db2return W1, b1, W2, b2#训练def train(X, y, hidden_dim, num_epochs, learning_rate):W1, b1, W2, b2 = build_network(X, y, hidden_dim)for epoch in range(num_epochs):a1, a2 = forward_propagation(X, W1, b1, W2, b2)loss, dW1, db1, dW2, db2 = backward_propagation(X, y, a1, a2, W1, W2)W1, b1, W2, b2 = update_parameters(W1, b1, W2, b2, dW1, db1, dW2, db2, learning_rate)if (epoch+1) % 100 == 0:print("Epoch {}: loss = {}".format(epoch+1, loss))return W1, b1, W2, b2#预测def predict(X, W1, b1, W2, b2):_, a2 = forward_propagation(X, W1, b1, W2, b2)predictions = (a2 > 0.5).astype(int)return predictions#主函数def main(:X, y = prepare_datahidden_dim = 3num_epochs = 1000learning_rate = 0.1W1, b1, W2, b2 = train(X, y, hidden_dim, num_epochs, learning_rate)predictions = predict(X, W1, b1, W2, b2)print("Predictions:", predictions)if __name__ == "__main__":main```注意:这段代码只是一个简单的实现,可能在复杂任务上效果不佳。

BP神经网络的数据分类

BP神经网络的数据分类

BP神经⽹络的数据分类BP 神经⽹络的数据分类——语⾳特征信号分类1. BP神经⽹络是⼀种多层前馈神经⽹络,该⽹络的主要特点是信号前向传递,误差反向传播。

在前向传递中,输⼊信号从输⼊层经隐含层逐层处理,直⾄输出层. 每⼀层的神经元状态只影响下⼀层神经元状态。

如果输出层得不到期望输出,则转⼊反向传播, 根据预测误差调整⽹络权值和阔值,从⽽使BP 神经⽹络预测输出不断逼近期望输出。

2. 语⾳特征信号识别是语⾳识别研究领域中的⼀个重要⽅⾯, ⼀般采⽤模式匹配的原理解决。

语⾳识别的运算过程为:⾸先,待识别语⾳转化为电信号后输⼊识别系统,经过预处理后⽤数学⽅法提取语⾳特征信号,提取出的语⾳特征信号可以看成该段语⾳的模式E 然后,将该段语⾳模型罔已知参考模式相⽐较,获得最佳匹配的参考模式为该段语⾳的识别结果。

3. 本代码选取了民歌、古筝、摇滚和流⾏四类不同⾳乐, ⽤BP 神经⽹络实现对这四类⾳乐的有效分类。

每段⾳乐都⽤倒谱系费⽴法提取500 组24 维语⾳特征信号。

4. BP 神经⽹络构建根据系统输⼊输出数据特点确定BP 神经⽹络的结构,由于语⾳特征输⼊信号有24 维,待分类的语⾳信号共有4类,所以BP 神经⽹络的结构为24-25-4 ,即输⼊层有24 个节点,隐含层有25 个节点,输出层有4 个节点。

BP 神经⽹络训练⽤训练数据训练BP 神经⽹络。

共有2 000 组语⾳特征信号,从中随机选择1 5 00 组数据作为训练数据训练⽹络, 5 00 组数据作为测试数据测试⽹络分类能⼒。

BP 神经⽹络分类⽤训练好的神经⽹络对测试数据所属语⾳类别进⾏分类。

算法流程图为:5. 程序实现%% 该代码为基于BP⽹络的语⾔识别%% 清空环境变量clcclear%% 训练数据预测数据提取及归⼀化%下载四类语⾳信号load data1 c1load data2 c2load data3 c3load data4 c4%四个特征信号矩阵合成⼀个矩阵data(1:500,:)=c1(1:500,:);data(501:1000,:)=c2(1:500,:);data(1001:1500,:)=c3(1:500,:);data(1501:2000,:)=c4(1:500,:);%从1到2000间随机排序k=rand(1,2000);[m,n]=sort(k);%输⼊输出数据input=data(:,2:25);output1 =data(:,1);%把输出从1维变成4维output=zeros(2000,4);for i=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;loopNumber=10;I=zeros(1,midnum);Iout=zeros(1,midnum);FI=zeros(1,midnum);dw1=zeros(innum,midnum);db1=zeros(1,midnum);%% ⽹络训练E=zeros(1,loopNumber);for ii=1:loopNumberE(ii)=0;for i=1:1:1500%% ⽹络预测输出x=inputn(:,i);% 隐含层输出for j=1:1:midnumI(j)=inputn(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));end% 输出层输出yn=w2'*Iout'+b2;%% 权值阀值修正%计算误差e=output_train(:,i)-yn;E(ii)=E(ii)+sum(abs(e));%计算权值变化率dw2=e*Iout;db2=e';for j=1:1:midnumS=1/(1+exp(-I(j)));FI(j)=S*(1-S);endfor k=1:1:innumfor j=1:1:midnumdw1(k,j)=FI(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)=FI(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;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%% 语⾳特征信号分类inputn_test=mapminmax('apply',input_test,inputps); fore=zeros(4,500);for ii=1:1for i=1:500%1500%隐含层输出for j=1:1:midnumI(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));endfore(:,i)=w2'*Iout'+b2;endend%% 结果分析%根据⽹络输出找出数据属于哪类output_fore=zeros(1,500);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)%print -dtiff -r600 1-4k=zeros(1,4);%找出判断错误的分类属于哪⼀类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 4case 4kk(4)=kk(4)+1; endend%正确率rightridio=(kk-k)./kk; disp('正确率')disp(rightridio);6.点击7.结果如下图。

数据预测之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)又称反向传播神经网络,通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。

  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
%%%%找出每一类的个体总和
kk = zeros ( 1,4 )
for i = 1:500
[ b,c ] = max ( output_test( :,i) ) ;
switch c
case 1
kk(1) = kk(1) + 1 ;
case 2
kk(2) = kk(2) + 1 ;
case 3
kk(3) = kk(3) + 1 ;
case 4
kk(4) = kk(4) + 1 ;
end
end
%%%正确率
nightridio = ( kk - k )./ kk。

相关文档
最新文档