神经网络BP算法的C语言实xian 2.docx
- 文档编号:2272695
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:12
- 大小:17.79KB
神经网络BP算法的C语言实xian 2.docx
《神经网络BP算法的C语言实xian 2.docx》由会员分享,可在线阅读,更多相关《神经网络BP算法的C语言实xian 2.docx(12页珍藏版)》请在冰豆网上搜索。
神经网络BP算法的C语言实xian2
神经网络BP算法的C语言实现
文件输入输出目录为:
F:
\BP\
训练样本文件名:
训练样本.txt
值为:
1
1
-1
1
-1
1
0
1
0
1
输出文件名为:
阈值.txt权值.txt
=========================
#include"stdlib.h"
#include"math.h"
#include"conio.h"
#include"stdio.h"
#defineN2/*/学习样本个数*/
#defineIN3/*/输入层神经元数目*/
#defineHN3/*/隐层神经元数目*/
#defineON2/*/输出层神经元数目*/
#defineZ20/*/旧权值保存-》每次study的权值都保存下来*/
doubleP[IN];/*/单个样本输入数据*/
doubleT[ON];/*/单个样本教师数据*/
doubleW[HN][IN];/*/输入层至隐层权值*/
doubleV[ON][HN];/*/隐层至输出层权值*/
doubleX[HN];/*/隐层的输入*/
doubleY[ON];/*/输出层的输入*/
doubleH[HN];/*/隐层的输出*/
doubleO[ON];/*/输出层的输出*/
doubleYU_HN[HN];/*/隐层的阈值*/
doubleYU_ON[ON];/*/输出层的阈值*/
doubleerr_m[N];/*/第m个样本的总误差*/
doublea;/*/输出层至隐层的学习效率*/
doubleb;/*/隐层至输入层学习效率*/
doublealpha;/*/动量因子,改进型bp算法使用*/
doubled_err[ON];
FILE*fp;
/*定义一个放学习样本的结构*/
struct{
doubleinput[IN];
doubleteach[ON];
}Study_Data[N];
/*改进型bp算法用来保存每次计算的权值*/
struct{
doubleold_W[HN][IN];
doubleold_V[ON][HN];
}Old_WV[Z];
intStart_Show()
{
clrscr();
printf("\n
***********************\n");
printf("*Welcometouse*\n");
printf("*thisprogramof*\n");
printf("*calculatingtheBP*\n");
printf("*model!
*\n");
printf("*Happyeveryday!
*\n");
printf("***********************\n");
printf("\n\nBeforestarting,pleasereadthefollows
carefully:
\n\n");
printf("1.PleaseensurethePathofthe'训练样
本.txt'(xunlianyangben.txt)is\ncorrect,like'F:
\BP\训练样
本.txt'!
\n");
printf("2.Thecalculatingresultswillbesavedinthe
Pathof'F:
\\BP\\'!
\n");
printf("3.Theprogramwillload10dataswhenrunning
from'F:
\\BP\\训练样本.txt'!
\n");
printf("4.TheprogramofBPcanstudyitselfforno
morethan30000times.\nAndsurpassingthenumber,the
programwillbeendedbyitselfin\npreventingrunning
infinitelybecauseoferror!
\n");
printf("\n\n\n");
printf("Nowpressanykeytostart...\n");
getch();
getch();
clrscr();
}
intEnd_Show()
{
printf("\n\n----------------------------------------------
-----\n");
printf("Theprogramhasreachedtheendsuccessfully!
\n\nPressanykeytoexit!
\n\n");
printf("\n
***********************\n");
printf("*Thisistheend*\n");
printf("*oftheprogramwhich*\n");
printf("*cancalculatetheBP*\n");
printf("*model!
*\n");
printf("***********************\n");
printf("*Thanksforusing!
*\n");
printf("*Happyeveryday!
*\n");
printf("***********************\n");
getch();
exit(0);
}
GetTrainingData()/*OK*/
{intm,i,j;
intdatr;
if((fp=fopen("f:
\\bp\\训练样本.txt","r"))==NULL)/*
读取训练样本*/
{
printf("Cannotopenfilestrikeanykeyexit!
");
getch();
exit
(1);
}
m=0;
i=0;
j=0;
while(fscanf(fp,"%d",&datr)!
=EOF)
{j++;
if(j<=(N*IN))
{if(i{
Study_Data[m].input[i]=datr;
/*printf("\ntheStudy_Datat[%d].input[%d]=%
f\n",m,i,Study_Data[m].input[i]);getch();*//*usetocheck
theloadedtrainingdatas*/
}
if(m==(N-1)&&i==(IN-1))
{
m=0;
i=-1;
}
if(i==(IN-1))
{
m++;
i=-1;
}
}
elseif((N*IN){if(i{Study_Data[m].teach[i]
=datr;
/*printf("\nTheStudy_Data[%d].teach[%d]=%
f",m,i,Study_Data[m].teach[i]);getch();*//*usetocheck
theloadedtrainingdatas*/
}
if(m==(N-1)&&i==(ON-1))
printf("\n");
if(i==(ON-1))
{m++;
i=-1;
}
}
i++;
}
fclose(fp);
printf("\nThereare[%d]datatsthathavebeenloaded
successfully!
\n",j);
/*showthedatawhichhasbeenloaded!
*/
printf("\nShowthedatawhichhasbeenloadedas
follows:
\n");
for(m=0;m{for(i=0;i{printf("\nStudy_Data[%d].input[%d]
=%f",m,i,Study_Data[m].input[i]);
}
for(j=0;j{printf("\nStudy_Data[%d].teach[%d]=%
f",m,j,Study_Data[m].teach[j]);
}
}
printf("\n\nPressanykeytostartcalculating...");
getch();
return1;
}
/*///////////////////////////////////*/
/*初始化权、阈值子程序*/
/*///////////////////////////////////*/
initial()
{inti;
intii;
intj;
intjj;
intk;
intkk;
/*隐层权、阈值初始化*/
for(i=0;i{
for(j=1;j{W[i][j]=(double)((rand()/32767.0)*2-1);/*初
始化输入层到隐层的权值,随机模拟0和1-1*/
printf("w[%d][%d]=%f\n",i,j,W[i][j]);
}
}
for(ii=0;ii{
for(jj=0;jj{V[ii][jj]=(double)((rand()/32767.0)*2-1);
/*初始化隐层到输出层的权值,随机模拟0和1-1*/
printf("V[%d][%d]=%f\n",ii,jj,V[ii][jj]);
}
}
for(k=0;k{
YU_HN[k]=(double)((rand()/32767.0)*2-1);/*隐层阈值初
始化,-0.01~0.01之间*/
printf("YU_HN[%d]=%f\n",k,YU_HN[k]);
}
for(kk=0;kk{
YU_ON[kk]=(double)((rand()/32767.0)*2-1);/*输出层阈值
初始化,-0.01~0.01之间*/
}
return1;
}/*子程序initial()结束*/
/*//////////////////////////////////////////*/
/*第m个学习样本输入子程序*/
/*/////////////////////////////////////////*/
input_P(intm)
{inti,j;
for(i=0;i{P[i]=Study_Data[m].input[i];
printf("P[%d]=%f\n",i,P[i]);
}
/*获得第m个样本的数据*/
return1;
}/*子程序input_P(m)结束*/
/*/////////////////////////////////////////*/
/*第m个样本教师信号子程序*/
/*/////////////////////////////////////////*/
input_T(intm)
{intk;
for(k=0;kT[k]=Study_Data[m].teach[k];
return1;
}/*子程序input_T(m)结束*/
H_I_O()
{
doublesigma;
inti,j;
for(j=0;j{
sigm
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络BP算法的C语言实xian 神经网络 BP 算法 语言 xian
![提示](https://static.bdocx.com/images/bang_tan.gif)