⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp_man.m

📁 本程序是人工编写的bp神经网络
💻 M
字号:
w_ji=rand(20,10);%输入层10个,隐层20,输出层3
w_kj=rand(3,20);
theta_j=rand(20,1);
theta_k=rand(3,1);
train_num=2000;
train_file=30;
yita=0.5;

% 训练样本
for num=1:train_num
    file_num=1;
    e=0;
    while file_num<=train_file
         for t=1:3
             switch t
                 case 1, string1='E:\lxp课件\神经网络\B\';, y=[1 0 0]';
                 case 2, string1='E:\lxp课件\神经网络\T\';, y=[0 1 0]';
                 case 3, string1='E:\lxp课件\神经网络\W\';, y=[0 0 1]';
             end
             % 读取数据
             string2=int2str(file_num);
             string=strcat(string1,string2);
             fid=fopen(string);
             source_data=fscanf(fid,'%4d');
             fclose(fid);
             % 提取特征作为输入矢量x
             data=fft(source_data,1024);
             a=abs(data(2:513));          %取fft变换结果的512个值的模
             max_a=max(a);
             min_a=min(a);
             median_a=median(a);%样本中位数,几乎不受个别游离数据影响
             mad_a=mad(a);%样本绝对值偏差,受游离数据影响小于样本标准差和方差      
             
            for i=1:512                  %归一化
                 a(i)=(a(i)-min_a)/(max_a-min_a);
             end
             for i=1:8
                 for j=1:64
		             t(j,i)=a(j+64*(i-1));
                 end
             end
%              max_t=max(t,[],1);
%              min_t=min(t,[],1);
             mean_t=mean(t,1);
             x=[mean_t median_a mad_a]';% 输入层输入10*1
             % 正向传播算法
             o_i=1./(1+exp(-x)); % 输入层输出10*1
             x_j=w_ji*o_i-theta_j; %隐层输入20*1
             o_j=1./(1+exp(-x_j)); % 隐层输出20*1
             x_k=w_kj*o_j-theta_k; %输出层输入3*1
             o_k=1./(1+exp(-x_k)); % 输出层输出3*1
             % 反向传播算法
             delta_k=(y-o_k).*o_k.*(1-o_k); % 输出层误差3*1
             delta_wkj=yita*delta_k*o_j'; % 权值w_kj调整量;学习率0.5
             delta_thetak=yita*delta_k;%输出层至隐含层阈值调整量
          
             delta_j=o_j.*(1-o_j).*(w_kj'*delta_k); % 隐层误差20*1
             delta_wji=yita*delta_j*o_i'; % 权值w_ji调整量
             delta_thetaj=yita*delta_j;%隐含层至输入层阈值调整量
             
             w_ji=delta_wji+w_ji;
             w_kj=delta_wkj+w_kj;
             theta_k=delta_thetak+theta_k;
             theta_j=delta_thetaj+theta_j;
             
             e=e+0.5*sum((y-o_k).^2);
             if e<0.01 
                num=train_num;
            end                
         end
         file_num=file_num+1;
    end
    num=num+1;
end
% load w1;

%识别样本
file_num=train_file+1;
recog_num=0;
while file_num<=52
      string1='E:\lxp课件\神经网络\W\';  
      string2=int2str(file_num);
      string=strcat(string1,string2);
      fid=fopen(string);
      source_data=fscanf(fid,'%d');
      fclose(fid);
      % 提取特征作为输入矢量x
             data=fft(source_data,1024);
             a=abs(data(2:513));          %取fft变换结果的512个值的模
             max_a=max(a);
             min_a=min(a);
             median_a=median(a);%样本中位数,几乎不受个别游离数据影响
             mad_a=mad(a);%样本绝对值偏差,受游离数据影响小于样本标准差和方差      
             
             for i=1:512                  %归一化
                 a(i)=(a(i)-min_a)/(max_a-min_a);
             end
             for i=1:8
                 for j=1:64
		             t(j,i)=a(j+64*(i-1));
                 end
             end
%              max_t=max(t,[],1);
%              min_t=min(t,[],1);
             mean_t=mean(t,1);
             x=[mean_t max_a min_a]';% 输入层输入10*1
                        
             o_i=1./(1+exp(-x)); % 输入层输出10*1
             x_j=w_ji*o_i-theta_j; %隐层输入20*1
             o_j=1./(1+exp(-x_j)); % 隐层输出20*1
             x_k=w_kj*o_j-theta_k; %输出层输入3*1
             o_k=1./(1+exp(-x_k)); % 输出层输出3*1
             
             
             [y,n]=max(o_k);
             if n==3
                recog_num=recog_num+1;
            end
            file_num=file_num+1;
 end
 rate=recog_num/22*100;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -