神经网络BP算法的C语言实xian 2.docx

上传人:b****2 文档编号:2272695 上传时间:2022-10-28 格式:DOCX 页数:12 大小:17.79KB
下载 相关 举报
神经网络BP算法的C语言实xian 2.docx_第1页
第1页 / 共12页
神经网络BP算法的C语言实xian 2.docx_第2页
第2页 / 共12页
神经网络BP算法的C语言实xian 2.docx_第3页
第3页 / 共12页
神经网络BP算法的C语言实xian 2.docx_第4页
第4页 / 共12页
神经网络BP算法的C语言实xian 2.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

神经网络BP算法的C语言实xian 2.docx

《神经网络BP算法的C语言实xian 2.docx》由会员分享,可在线阅读,更多相关《神经网络BP算法的C语言实xian 2.docx(12页珍藏版)》请在冰豆网上搜索。

神经网络BP算法的C语言实xian 2.docx

神经网络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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1