week1024 week1024
关注数: 4 粉丝数: 95 发帖数: 548 关注贴吧数: 9
[求助]matlab仿真一个bp网络 求助高手,我想实现个简单的bp网络,具体参数已有,就是不会用matlab仿真出一条曲线,请帮忙下,以下是我用c编写的关于这个bp网络的简单程序: #include "stdio.h" #include "conio.h" #include "math.h" //定义希望得到的数值和学习率 #define y 1000 #define n 0.01 //权值和阙值的组合形式 float f(float a,float b,float c){ float f = a*b+c; return f; } //隐藏层的阙值函数 float F(float a){ float F = 1/(1+exp(-a)); return F; } //输出层的阙值函数 float O(float a){ float O = a; return O; } //误差函数 float e(float a,float b){ float e = (b-a)*(b-a)/2; return e; } main() { float w11 = 0.023002; float w12 = 0.024402; float b11 = 2.11; float b12 = 2.32; float w21 = 16.0; float w22 = 20.0; float b2 = 2.0; float x = 26;//初始化基本参数 float e1; float addw21; float addw22; float addb2; float addw11; float addw12; float addb11; float addb12; //定义增量 do{ float f1 = f(x,w11,b11); float f2 = f(x,w12,b12); float F1 = F(f1); float F2 = F(f2); float o = F1*w21+F2*w22+b2; float O1 = O(o); //网络传递 x = O1; e1 = e(x,y); printf("x=%f\t",x); printf("e=%f\n",e1); addw21 = -(y-x)*F1; addw22 = -(y-x)*F2; addb2 = -(y-x); addw11 = -(y-x)*w21*F1*(1-F1)*f1; addw12 = -(y-x)*w22*F2*(1-F2)*f2; addb11 = -(y-x)*w21*F1*(1-F1); addb12 = -(y-x)*w22*F2*(1-F2); w21 = w21-n*addw21; w22 = w22-n*addw22; b2 = b2-n*addb2; //误差计算 w11 = w11-n*addw11; w12 = w12-n*addw12; b11 = b11-n*addb11; b12 = b12-n*addb12; getch(); }while(e1>0.0001); //循环实现定义误差 getch(); } 仅仅是一个仿真实现一条曲线 曲线的x轴是训练次数,y轴是所对应的输出值。问题补充:这是一个3层bp网络,隐藏层有2个神经元,权值和阙值分别为:w11,w12,b11,b12,训练函数:logsig。输出层一个神经元,权值和阙值分别为:w21,w22,b2,函数是:y=x。现在的问题是我不知道怎么用matlab将整个过程仿真出一个曲线,请教高手!!
1 下一页