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

📄 bp.txt

📁 用bp神经网络对sin(x)拟合,隐含层采用sigmoid函数
💻 TXT
字号:
%用bp神经网络对sin(x)拟合,隐含层采用sigmoid函数,输出层采用线性函数,
function ann()
g=0.06;     %学习速率
e=0.01;    %误差评价值
p=5;        %隐含层神经元数
m1=0.9;     %线性函数的系数 
m2=-1.5;    %线性函数的截距
x=(0:pi/100:2*pi);   %产生输入样本
a1=zeros(1,p);    %隐层阈值
a2=0;               %输出阈值
[a,b]=size(x);  %得到b个输入样本
for i=1:b
    d(i)=cos(x(i));  %得到b个输入样本对应的教师信号
end
for i=1:p
   w(i)=rand(1);   %对输入层和输出层的连接权进行初始化
   v(i)=rand(1);   %对隐含层和输出层的连接权进行初始化
end
%c=1;   %c为训练次数
E1=1;   
n=1;
t1=0;
while E1>=e
    E1=0;
    while(n<=b)    %训练b个样本
        net2=0;     
        for i=1:p
            net1(i)=x(n)*w(i)+a1(i);        %计算隐含层输入
            o(i)=(1+exp(-(net1(i))))^(-1);  %计算隐含层输出
        end
        for i=1:p
            net2=net2+o(i)*v(i);    
        end
        net2=net2+a2;            %计算输出层输入   
        y(n)=m1*net2+m2;         %计算输出层输出
        E=0.5*((y(n)-d(n))^2);   %计算第n样本的误差
        
        for i=1:p
            v(i)=v(i)-g*(y(n)-d(n))*m1*o(i);  %调整输出层和隐层间的权值
            
        end
        a2=a2-g*(y(n)-d(n))*m1;     %输出阈值调整
        for i=1:p
            w(i)=w(i)-g*(y(n)-d(n))*v(i)*(o(i)*(1-o(i)))*x(n);  %调整输入层和隐层间的权值
            a1(i)=a1(i)-(y(n)-d(n))*v(i)*o(i)*(1-o(i))*g;       %输入阈值调整
        end
        E1=E1+E;
        n=n+1;  %准备下一个样本
    end 
    t1=t1+1;
    w1(t1)=w(1);
    w2(t1)=w(2);
    w3(t1)=w(3);
    w4(t1)=w(4);
    w5(t1)=w(5);
    v1(t1)=v(1);
    v2(t1)=v(2);
    v3(t1)=v(3);
    v4(t1)=v(4);
    v5(t1)=v(5);
    E1
    E2(t1)=E1;
    n=1;
end

    for n=1:b
        net2=0;     
        for i=1:p
            net1(i)=x(n)*w(i)+a1(i);        %计算隐含层输入
            o(i)=(1+exp(-(net1(i))))^(-1);  %计算隐含层输出
        end
        for i=1:p
            net2=net2+o(i)*v(i);    
        end
        net2=net2+a2;            %计算输出层输入   
        y(n)=m1*net2+m2;         %计算输出层输出
    end
figure(1)
plot(x,y,'g',x,d,'b--+')   %输出教师与拟合函数
title('BP网络辨识效果')
figure(2)
i=1:1:t1;
plot(i,w1,i,w2,i,w3,i,w4,i,w5)
title('中间层权值变化趋势')
figure(3)
plot(i,v1,i,v2,i,v3,i,v4,i,v5)
title('输出层权值变化图')
figure(4)
plot(i,E2);
title('误差变化趋势')

⌨️ 快捷键说明

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