matlab仿真一个bp网络
求助高手,我想实现个简单的bp网络,具体参数已有,就是不会用matlab仿真出一条曲线,请帮忙下,以下是我用c编写的关于这个bp网络的简单程序:#include"stdi...
求助高手,我想实现个简单的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();
}
仅仅是一个仿真而已!!
这是一个3层bp网络,隐藏层有2个神经元,权值和阙值分别为:w11,w12,b11,b12,训练函数:logsig。输出层一个神经元,权值和阙值分别为:w21,w22,b2,函数是:y=x。现在的问题是我不知道怎么用matlab将整个过程仿真出一个曲线,请教高手!! 展开
#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();
}
仅仅是一个仿真而已!!
这是一个3层bp网络,隐藏层有2个神经元,权值和阙值分别为:w11,w12,b11,b12,训练函数:logsig。输出层一个神经元,权值和阙值分别为:w21,w22,b2,函数是:y=x。现在的问题是我不知道怎么用matlab将整个过程仿真出一个曲线,请教高手!! 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询