单层神经网络实验报告
![单层神经网络实验报告](https://img.360docs.net/imgda/1pikexdcd32u7q8itw6hrvx9tha9s9rh-a1.webp)
![单层神经网络实验报告](https://img.360docs.net/imgda/1pikexdcd32u7q8itw6hrvx9tha9s9rh-62.webp)
实验报告
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.线性拟合的测试数据