BP算法的实现文档格式.docx
《BP算法的实现文档格式.docx》由会员分享,可在线阅读,更多相关《BP算法的实现文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
time.h"
#defineN8/*学习样本个数(测试样本个数)*/
#defineIN3/*输入层神经元数目*/
#defineHN2/*隐层神经元数目*/
#defineON1/*输出层神经元数目*/
floatP[IN];
/*单个样本输入数据*/
floatT[ON];
/*单个样本教师数据*/
floatW[HN][IN];
/*输入层至隐层权值*/
floatV[ON][HN];
/*隐层至输出层权值*/
floatX[HN];
/*隐层的输入*/
floatY[ON];
/*输出层的输入*/
floatH[HN];
/*隐层的输出*/
floatO[ON];
/*输出层的输出*/
floatYU_HN[HN];
/*隐层的阈值*/
floatYU_ON[ON];
/*输出层的阈值*/
floaterr_m[N];
/*第m个样本的总误差*/
floata;
/*输出层至隐层学习效率*/
floatb;
/*隐层至输入层学习效率*/
floatalpha;
/*/动量因子,改进型bp算法使用*/
floatd_err[ON];
/*δk*/
floate_err[HN];
/*δj*/
FILE*fp;
/*定义一个放学习样本的结构*/
struct{
floatinput[IN];
floatteach[ON];
}Study_Data[N];
/*定义一个放测试样本的结构*/
floatexpect[ON];
}Test_Data[N];
/*改进型bp算法用来保存每次计算的权值*/
floatold_W[HN][IN];
floatold_V[ON][HN];
intStart_Show()
{
clrscr();
printf("
\n
***********************\n"
);
*
Welcometouse
*\n"
thisprogramof
calculatingtheBP*\n"
model!
Happyeveryday!
***********************\n"
\n\nBeforestarting,pleasereadthefollowscarefully:
\n\n"
TheprogramofBPcanstudyitselffornomorethan200000times.\nAndsurpassingthenumber,theprogramwillbeendedbyitselfin\npreventingrunninginfinitelybecauseoferror!
\n"
\n\n\n"
Nowpressanykeytostart...\n"
getch();
}
intEnd_Show()
\n\n---------------------------------------------------\n"
Theprogramhasreachedtheendsuccessfully!
\n\nPressanykeytoexit!
Thisistheend
*oftheprogramwhich*\n"
*cancalculatetheBP*\n"
Thanksforusing!
exit(0);
/*读取训练样本*/
GetTrainingData()
{inti,j,m;
floatdatr;
if((fp=fopen("
sample.txt"
"
r"
))==NULL)
{
printf("
Cannotopenfilestrikeanykeyexit!
"
getch();
exit
(1);
}
for(i=0;
i<
N;
i++)
{j=0;
while(j!
=(IN+ON)&
&
fscanf(fp,"
%f"
&
datr)!
=EOF)
{if(j>
IN-1)Study_Data[i].teach[j-IN]=datr;
else
Study_Data[i].input[j]=datr;
/*printf("
\ntheStudy_Data[%d].input[%d]=%f\n%f"
i,j,Study_Data[i].input[j],datr);
*/
/*usetochecktheloadedtrainingdatas*/
j++;
fclose(fp);
\nThereare[%d]sampledatasthathavebeenloadedsuccessfully!
N*(IN+ON));
\nShowthedatawhichhasbeenloadedasfollows:
for(m=0;
m<
m++)
{for(i=0;
IN;
{printf("
Study_Data[%d].input[%d]=%f
"
m,i,Study_Data[m].input[i]);
for(j=0;
j<
ON;
j++)
Study_Data[%d].teach[%d]=%f
m,j,Study_Data[m].teach[j]);
\n\n\nPressanykeytobeginStudy..."
return1;
/*初始化权、阈值子程序*/
initial()
{inti;
intii;
intj;
intjj;
intk;
intkk;
\nRandsomWeightvalueandBiasvalueasfollow:
srand(time(NULL));
/*随机函数种子*/
\nWeightValue:
HN;
i++){
j++)
{W[i][j]=(float)(((rand()/32767.0)*2-1)/2);
/*初始化输入层到隐层的权值,随机模拟0.5~-0.5*/
\nw[%d][%d]=%f"
i,j,W[i][j]);
for(ii=0;
ii<
ii++){
for(jj=0;
jj<
jj++)
{V[ii][jj]=(float)(((rand()/32767.0)*2-1)/2);
/*初始化隐层到输出层的权值,随机模拟0.5~-0.5*/
\nV[%d][%d]=%f"
ii,jj,V[ii][jj]);
\n\nBiasValue:
for(k=0;
k<
k++){
YU_HN[k]=1.0;
/*隐层阈值初始化,-0.01~0.01之间*/
\nYU_HN[%d]=%f"
k,YU_HN[k]);
for(kk=0;
kk<
kk++){
YU_ON[kk]=1.0;
/*输出层阈值初始化,-0.01~0.01之间*/
\nYU_ON[%d]=%f\n"
kk,YU_ON[kk]);
\n\n\n\n\nPressanykeytostartculculating...:
Pleasewait..."
/*第m个学习样本输入子程序*/
input_P(intm)
{inti,j;
for(i=0;
i++)
{P[i]=Study_Data[m].input[i];
retu