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

📄 mybp.m

📁 我做的一个用matlab程序编写的BP算法
💻 M
字号:
function out=mybp() 
clear all
N=16;         %学习样本个数(number)
In=4;        %输入层神经元个数(Input number)
Hn=10;        %隐层神经元个数(Hidden number)
On=4;        %输出层神经元个数(Output number)
times=800;                %学习次数
eta_hi=0.9;                 %定义隐层到输入层的学习速率
eta_oh=0.9;                 %定义输出层到隐层的学习速率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 主程序部分
fid = fopen('trainingdata.txt');                
X= (fscanf(fid,'%g',[In N]))'           %读入待训练数据
fid = fopen('teacherdata.txt');                
T= (fscanf(fid,'%g',[On N]))'           %读入期望输出
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Whi=initw(In,Hn);       %输入层和隐层之间权值的初始化
Woh=initw(Hn,On);       %隐层和输出层之间权值的初始化
thh=initw(1,Hn);        %隐层阈值初始化(threshold of hidden)
tho=initw(1,On);        %输出层阈值初始化(threshold of output)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%计算第n次迭代时的实际输出%%%%%%%%%%%%%%%% 
for m=1:times       
    E=0;  
    for n=1:N   
        temp1=X(n,:);                %取出X第n行,即第n组学习样本
        Teacher=T(n,:);                %读入教师数据给Teacher
        for j=1:Hn                    
            temp2=Whi(:,j);        %取出Whi第j列,即第j个神经元所对应的权值
            net_h(j)=temp1*temp2+thh(j);                       
            Y(j)=f1(net_h(j));      %求出隐层的输出
        end         
        for k=1:On
            temp3=Woh(:,k);         %取出Woh第k列,即第k个神经元所对应的权值
            net_o(k)=Y*temp3+tho(k);            
            Z(k)=f2(net_o(k));       %求出输出层的输出    
        end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        for j=1:Hn 
            for k=1:On                  %输出层到隐层的权值调整
            delta_o(k)=(Teacher(k)-Z(k))*derif2(net_o(k));
            delta_Woh(j,k)=eta_oh*delta_o(k)*Y(j);
            end
        end       
        for k=1:On, 
            delta_tho(k)=eta_oh*delta_o(k);  %输出层阈值的变化
        end        
        for i=1:In                      %隐层到输入层的权值调整
            for j=1:Hn 
                sigma=0;
                for k=1:On                                      
                sigma=sigma+Woh(j,k)*delta_o(k);                            
                end
                delta_h(j)=derif1(net_h(j))*sigma;  
                delta_Whi(i,j)=eta_hi*delta_h(j)*temp1(i);
            end
        end  
        for j=1:Hn     
            delta_thh(j)=eta_hi*delta_h(j);  %隐层阈值的变化
        end
        Woh=Woh+delta_Woh;          %更新输出层到隐层的权值
        Whi=Whi+delta_Whi;          %更新隐层到输出层的权值
        tho=tho+delta_tho;          %更新输出层阈值
        thh=thh+delta_thh;          %更新隐层阈值
        E=E+Err(Teacher,Z,On);      %计算误差
        [temp1 Teacher Z Err(Teacher,Z,On)]
    end
    Error(m)=E;
end
out=plot(Error);
save W Woh Whi tho thh



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Programmed by XFX, Thanks for advice: fangxur@gmail.com

⌨️ 快捷键说明

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