資源簡介
BP神經網絡關于多分類的代碼源程序,主要是關于四分類的問題
代碼片段和文件信息
web?browser?http://www.ilovematlab.cn/thread-60056-1-1.html
%%?清空環境變量
clc
clear
%%?訓練數據預測數據提取及歸一化
%下載四類語音信號
load?data1?c1
load?data2?c2
load?data3?c3
load?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(12000);
[mn]=sort(k);
%輸入輸出數據
input=data(:2:25);
output1?=data(:1);
%把輸出從1維變成4維
for?i=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):)‘;
%輸入數據歸一化
[inputninputps]=mapminmax(input_train);
%%?網絡結構初始化
innum=24;
midnum=25;
outnum=4;
?
%權值初始化
w1=rands(midnuminnum);
b1=rands(midnum1);
w2=rands(midnumoutnum);
b2=rands(outnum1);
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(:i);
????????%?隱含層輸出
????????for?j=1:1:midnum
????????????I(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:midnum
????????????S=1/(1+exp(-I(j)));
????????????FI(j)=S*(1-S);
????????end??????
????????for?k=1:1:innum
????????????for?j=1:1:midnum
????????????????dw1(kj)=FI(j)*x(k)*(e(1)*w2(j1)+e(2)*w2(j
評論
共有 條評論