📄 11.cpp
字号:
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
void main()
{
time_t t;
srand((unsigned) time(&t));
double w11,w12,w21,w22,v1,v2,q1,q2,r;
//输入层至中间层连接权w11,w12,w21
//中间层至输出层连接权v1,v2
//中间层各单元输出阀值q1,q2
//输出层单元输出阀值r
//(-1,1)之间的随机数,初始化权值及阀值
w11=(rand()/32767.0)*2-1;
w12=(rand()/32767.0)*2-1;
w21=(rand()/32767.0)*2-1;
w22=(rand()/32767.0)*2-1;
v1=(rand()/32767.0)*2-1;
v2=(rand()/32767.0)*2-1;
q1=(rand()/32767.0)*2-1;
q2=(rand()/32767.0)*2-1;
r=(rand()/32767.0)*2-1;
double x[4][2],y[4];
int k,n=0;
double s1,s2,b1,b2,L,C,d,e1,e2;
//中间层单元输入向量s1,s2、输出向量b1,b2
//输出层单元输入向量L、输出向量C
//输出层的各单元的误差d,中间层各单元的误差e1,e2
double a=0.6,b=0.6; //学习速率
double E=0,h=0.0011; //全局误差
k=rand()%4;
x[k][0]=(rand()/32767.0)*2-1; //取随机训练模式对
x[k][1]=(rand()/32767.0)*2-1;
if(x[k][0]<0.5)
x[k][0]=0.0;
else
x[k][0]=1.0;
if(x[k][1]<0.5)
x[k][1]=0.0;
else
x[k][1]=1.0;
if((x[k][0]==0.0 && x[k][1]==0.0)||(x[k][0]==1.0 && x[k][1]==1.0))
y[k]=0.0;
else
y[k]=1.0;
cout<<"输入模式对:"<<endl;
cout<<"x["<<k<<"][0]="<<x[k][0]<<endl;
cout<<"x["<<k<<"][1]="<<x[k][1]<<endl;
cout<<"理想输出:y["<<k<<"]="<<y[k]<<endl;
//训练
E=h+1;
while (E>h)
{
E=0;
n++;
s1=w11*x[k][0]+w21*x[k][1]-q1; //中间层单元各输入
b1=1/(1+exp(s1)); //中间层单元各输出
s2=w12*x[k][0]+w22*x[k][1]-q2;
b2=1/(1+exp(s2));
//----------------------------------------
L=v1*b1+v2*b2-r; //输出层单元输入
C=1/(1+exp(L)); //输出层单元输出
//----------------------------------------
d=(y[k]-C)*C*(1-C); //输出层的各单元的误差
//----------------------------------------
e1=d*v1*b1*(1-b1); //中间层各单元的误差
e2=d*v2*b2*(1-b2);
//-------------------------------------------
v1=v1+a*d*b1; //修正中间层至输出层连接权
v2=v2+a*d*b2;
r=r+a*d; //修正输出层单元输出阀值
//-------------------------------------------
w11=w11+b*e1*x[k][0]; //修正输入层至中间层连接权
w12=w12+b*e2*x[k][0];
w21=w21+b*e1*x[k][1];
w22=w22+b*e2*x[k][1];
q1=q1+b*e1; //修正中间层各单元输出阀值
q2=q2+b*e2;
//-------------------------------------------
E=(y[k]-C)*(y[k]-C)/2;
if(n>10000) //自适应调整
b*=1.05;
}
if(C<0.5)
C=0.0;
else
C=1.0;
cout.precision(10);
cout<<"E="<<E<<endl;
cout<<"训练次数:n="<<n<<endl;
cout<<"实际输出:C="<<C<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -