神经网络BP算法程序C语言实现.doc
- 文档编号:14762673
- 上传时间:2023-06-27
- 格式:DOC
- 页数:7
- 大小:47.50KB
神经网络BP算法程序C语言实现.doc
《神经网络BP算法程序C语言实现.doc》由会员分享,可在线阅读,更多相关《神经网络BP算法程序C语言实现.doc(7页珍藏版)》请在冰点文库上搜索。
/************************************************
BackPropagationAlgorithm
************************************************/
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
/************************************************
TheDefinitionofUserData
************************************************/
#defineMAXINPUT1
#defineMAXHIDE3
#defineMAXOUTPUT1
#defineMAX1
#defineMIN-1
#defineT100
#defineCA4
doublea=0.8;
doubleb=0.05;
doublek=0;
doubleerror=0;
intt=0;
doublesout[MAXOUTPUT];
doubleshide[MAXHIDE];
doublem=2;
doublehowchange[MAXHIDE][MAXOUTPUT];
doubleihwchange[MAXINPUT][MAXHIDE];
doubleCatalogueOut[CA][MAXOUTPUT];
doubleCatalogueIn[CA][MAXINPUT];
/************************************************
TheDefinitionofDataStructure
************************************************/
structtheBP
{
doubleinput[MAXINPUT];
doublehide[MAXHIDE];
doubleoutput[MAXOUTPUT];
doubleihw[MAXINPUT][MAXHIDE];
doublehow[MAXHIDE][MAXOUTPUT];
};
structtheBPbpa;
/************************************************
DefinitionofPrototype
************************************************/
voidWeightInitial();
voidInitialError();
voidInPutCatalogue();
voidCalculateOut(intk);
voidCalculateError(intk);
voidReverseHideError();
voidCalculateChange();
voidCalculateNewWeight();
voidTest();
voidTestCalculateOut();
voidcamain();
voidmain()
{
WeightInitial();
// InitialError();
InPutCatalogue();
//do
intm=0;
while
(1)
{
printf("请选择要进行的操作\n");
printf("0----------------学习\n");
printf("1----------------测试\n");
printf("2----------------退出\n");
scanf("%d",&m);
switch(m)
{
case0:
camain();
break;
case1:
Test();
break;
case2:
exit(0);
}//while((error)>k);;
}
}
voidcamain()
{
for(t=0;t { for(intk=0;k { CalculateOut(k); CalculateError(k); ReverseHideError(); CalculateChange(); CalculateNewWeight(); } for(k=0;k { CalculateOut(k); } } } /************************************************ Function: initialtheweight ************************************************/ voidWeightInitial() { //产生输入层到隐藏层的权值 for(inti=0;i { for(intj=0;j { bpa.ihw[i][j]=0.3;//((double)rand()/(double)(RAND_MAX))*(MAX-MIN)+MIN; } } //产生从隐藏层到输出层的权值 for(i=0;i { for(intj=0;j { bpa.how[i][j]=0.2;//((double)rand()/(double)(RAND_MAX))*(MAX-MIN)+MIN; } } } /************************************************ Function: inputtheCatalogue ************************************************/ voidInPutCatalogue() { for(intk=0;k { printf("请输入第%d个样本的输入值: \n",k); for(inti=0;i { scanf("%lf",&bpa.input[i]); CatalogueIn[k][i]=bpa.input[i]; } printf("请输入第%d个样本的输出值: \n",k); for(i=0;i { scanf("%lf",&CatalogueOut[k][i]); } } } /************************************************ Function: calculatetheout ************************************************/ voidCalculateOut(intk) { //计算隐藏层的输出 for(intj=0;j { double sum2=0; for(inti=0;i { bpa.input[i]=CatalogueIn[k][i]; sum2+=bpa.ihw[i][j]*bpa.input[i];//计算输入 } bpa.hide[j]=1/(1+exp(-sum2));//计算输出 } //计算每输出层个单元的输入和输出 for(j=0;j { doublesum3=0; for(inti=0;i { sum3+=bpa.how[i][j]*bpa.hide[i];//计算输入 } bpa.output[j]=m*sum3;//计算输出bpa.output[j]=1/(1+exp(-sum3)) printf("第%d个样本的最后输出%lf\n",k,bpa.output[j]); } } voidTestCalculateOut() { //计算隐藏层的输出 for(intj=0;j { doublesum1=0; for(inti=0;i { sum1=sum1+bpa.ihw[i][j]*bpa.input[i];//计算输入 } bpa.hide[j]=1/(1+exp(-sum1));//计算输出 } //计算每输出层个单元的输入和输出 for(j=0;j { doublesum2=0; for(inti=0;i { sum2=sum2+bpa.how[i][j]*bpa.hide[i];//计算输入 } bpa.output[j]=m*sum2;//计算输出bpa.output[j]=1/(1+exp(sum2)) printf("最后输出%lf\n",bpa.output[j]); } } /************************************************ Function: 对输出层Calculate ************************************************/ voidCalculateError(intk) { doubletemp=0; error=0; for(inti=0;i { temp=(CatalogueOut[k][i]-bpa.output[i])*(CatalogueOut[k][i]-bpa.output[i]); error=(0.5)*temp+error; } for(i=0;i { sout[i]=(CatalogueOut[k][i]-bpa.output[i])*bpa.output[i]*(1-bpa.output[i]); } } /************************************************ Function: 从后向前对隐藏层 ************************************************/ voidReverseHideError() { for(inti=0;i { doublesum=0; for(intj=0;j { sum+=sout[j]*bpa.how[i][j]; } shide[i]=(bpa.hide[i])*(1-bpa.hide[i])*sum; } } /************************************************ Function: Calculatethe权值的变化量 ************************************************/ voidCalculateChange() { intj=0; //隐藏层到输出层 for(inti=0;i { for(j=0;j { howchange[i][j]=a*(howchange[i][j])+b*(sout[i])*(bpa.hide[i]);// } } //对输入层到隐藏层 for(i=0;i { for(j=0;j { ihwchange[i][j]=a*(ihwchange[i][j])+b*(shide[i])*(bpa.input[i]);// } } } /************************************************ Function: Calculatethe新的权值 ************************************************/ voidCalculateNewWeight() { intj=0; //隐藏层到输出层 for(inti=0;i { for(j=0;j { bpa.how[i][j]=bpa.how[i][j]+howchange[i][j]; } } //对输入层到隐藏层 for(i=0;i { for(j=0;j { bpa.ihw[i][j]=bpa.ihw[i][j]+ihwchange[i][j]; } } } voidTest() { printf("请输入测试数据的输入值: \n"); for(inti=0;i { scanf("%lf",&bpa.input[i]); } TestCalculateOut(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 BP 算法 程序 语言 实现