单层神经网络实验报告

单层神经网络实验报告
单层神经网络实验报告

实验报告

1.实验项目名称:人工神经网络

2.程序设计语言:C语言

3.数据物理结构设计

输入矢量,输出矢量,权矩阵,阈值向量都用数组表示

4.类或函数定义

函数定义:

#include

#include

#include

#include

double F2(double a){

if(a>=0)

return 1;

else

return 0;

}

double F1(double a){

return a;

}

int main(){

int G;

double a,r,d,e;

int i = 0,j = 0,k = 0,q,n,m,t = 0,T;

srand((unsigned)time(NULL));

//printf("输入初置精度控制参数,学习率\n");

//scanf("%lf %lf",&a,&r);

printf("输入样本数,输入个数,输出个数\n");

scanf("%d %d %d",&q,&n,&m);

double x[n][q],y[m][q],w[m][n],b[m],o[m];

printf("输入矢量\n");

for(i = 0;i

for(j = 0;j

scanf("%lf",&x[i][j]);

}

}

printf("输出矢量\n");

for(i = 0;i

for(j = 0;j

scanf("%lf",&y[i][j]);

}

}

a = 0.001+1.0*rand()/RAND_MAX *(0.01-0.001);

i=0;

while(i<50){

i++;

}

r = r = 0.000001+1.0*rand()/RAND_MAX *(0.00001-0.000001);

d = r+1;

T = 1000000;

for(i = 0;i

for(j = 0;j

w[i][j] = -2+1.0*rand()/RAND_MAX *4;

//memset(w,9,sizeof(w)*m*n);

for(i = 0;i

b[i] = -2+1.0*rand()/RAND_MAX *4;

memset(o,0.0001,sizeof(o)*m);

printf("a:%.8lf\n",a);

printf("r:%.8lf\n",r);

printf("线性拟合请输入1,分类问题输入2:");

scanf("%d",&G);

while(d>=r && t

d = 0;

for(k = 0;k

for(i = 0;i

o[i] = 0;

for(j = 0;j

o[i]+=w[i][j]*x[j][k];

}

o[i]+=b[i];

if(G==1)

o[i]=F1(o[i]);

else

o[i]=F2(o[i]);

}

for(i = 0;i

e = y[i][k]-o[i];

for(j = 0;j

w[i][j]+=a*e*x[j][k];

}

b[i]+=a*e;

d+=e*e;

}

}

t = t+1;

}

printf("t:%d\n",t);

printf("d:%.8lf\n",d);

printf("W:\n");

for(i = 0;i

for(j = 0;j

printf("%.4lf ",w[i][j]);

}

printf("\n");

}

printf("\n");

printf("B:\n");

for(i = 0;i

printf("%.4lf ",b[i]);

return 0;

}

5.算法描述

对于所要解决的问题,确定输入向量 X,目标向量T,由此确定维数及网络结构参数,n,m;(m 代表输出个数,n代表输入个数)

参数w和b的初始化;(本程序采用产生-1—1之间的随机数进行w和b的初始化)

设定最大循环次数(T);

计算网络输出;oo[N][N]

检查输出矢量oo[N][N]与目标矢量T是否相同,如果相同或者误差满足要求,或以达最大循环次数,训练结束,否则转入第6步;

学习,并返回第4步。

6.实验运行结果

1.感知器网络的测试数据

输入矢量:P=[-0.5 –0.5 0.3 0.0;

-0.5 0.5 -0.5 1.0]

目标分类矢量:T=[1.0 1.0 0.0 0.0]

2.线性拟合的测试数据

相关主题
相关文档
最新文档