㈠ 有哪本c语言的书上有神经网络的代码
数字信号处理C语言程序集
第五篇 人工神经网络
㈡ 最近在学习人工神经网络算法,哪位能发一个含有c语言原程序的BP算法实例哪其它语言的也可以
附件是BP神经网络的C语言实现。
BP(Back Propagation)神经网络是86年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
㈢ 用C语言解决BP神经网络算法
囧,用C语言干嘛,matlab里面带有神经网络函数库的……
55555,我的论文也是用神经网络仿真……
我的隐藏层个数都没确定……输入节点数也没有定……
matlab神经网络函数库的程序,在ilovematlab论坛上有。
㈣ 用c语言编写RBF神经网络程序
RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。
简单说明一下为什么RBF网络学习收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。
如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络。常见的局部逼近网络有RBF网络、小脑模型(CMAC)网络、B样条网络等。
附件是RBF神经网络的C++源码。
㈤ 急求好用的人工神经网络源程序C语言的,要求好用的,那些错误太多的,兄弟们就别发给我了,都快晕死了
#include "stdlib.h"
#include "math.h"
#include "conio.h"
#include "stdio.h"
#define N 36 /*学习样本个数*/
#define M 3 /*测试样本个数*/
#define IN 3 /*输入层神经元个数*/
#define HN 9 /*隐层神经元个数*/
#define ON 1 /*输出层神经元个数*/
float P[IN]; /*单个样本输入数据*/
float T[ON]; /*单个样本教师数据*/
float W[HN][IN]; /*输入层至隐层权值*/
float V[ON][HN]; /*隐层至输出层权值*/
float X[HN]; /*隐层输入*/
float Y[ON]; /*输出层输入*/
float H[HN]; /*隐层输出*/
float O[ON]; /*输出层输出*/
float YU_HN[HN]; /*隐层阈值*/
float YU_ON[ON]; /*输出层能阈值*/
float err_m[N]; /*第m个样本误差*/
float a; /*输出层至隐层学习率*/
float b; /*隐层至输入层学习率*/
float alpha; /*改进型BP算法的动量因子*/
float d_err[ON]; /*输出层各神经元调整误差*/
float e_err[HN]; /*隐层各神经元调整误差*/
FILE *fp;
/*定义一个放学习样本的结构体*/
struct
{
float input[IN];
float teach[ON];
}Study_Data[N];
/*定义一个放测试样本的结构体*/
struct
{
float input[IN];
float expect[ON];
}Test_Data[M];
/*改进型BP算法用来保存每次计算的权值*/
float old_W[HN][IN];
float old_V[ON][HN];
/*读取训练样本*/
GetTrainingData()
{int i,j,m;
float datr;
if((fp=fopen("D:/BP/yundong/sample1.txt","r"))==NULL)
{
printf("Can not open file strike any key exit!");
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;
j++;
}
}
fclose(fp);
printf("\nThere are [%d] sample datas that have been loaded successfully!\n",N*(IN+ON));
printf("\nShow the data which has been loaded as follows:\n");
for(m=0;m<N;m++)
{for(i=0;i<IN;i++)
{printf("Study_Data[%d].input[%d]=%f\n",m,i,Study_Data[m].input[i]);}
for(j=0;j<ON;j++)
{printf("Study_Data[%d].teach[%d]=%f\n",m,j,Study_Data[m].teach[j]);}
}
printf("\n\nPress any key to begin Study...");
getch();
clrscr();
return 1;
}
/*初始化权、阈值子程序*/
initial()
{int i;
int ii;
int j;
int jj;
int k;
int kk;
printf("\nRandsom Weight value and Bias value!\n");
srand(time(NULL));/*随机函数种子*/
printf("\nWeight Value:\n");
for(i=0;i<HN;i++){
for(j=0;j<IN;j++) {W[i][j]=(float)(((rand()/32767.0)*2-1)/2);
/*初始化输入层到隐层的权值,随机模拟0.5~-0.5 */
printf("\nw[%d][%d]=%f",i,j,W[i][j]);
}
}
for(ii=0;ii<ON;ii++) {
for(jj=0;jj<HN;jj++) {V[ii][jj]= (float)(((rand()/32767.0)*2-1)/2);
/*初始化隐层到输出层的权值,随机模拟0.5~-0.5 */
printf("\nV[%d][%d]=%f",ii,jj,V[ii][jj]);
}
}
printf("\n\nBias Value:\n");
for(k=0;k<HN;k++) {
YU_HN[k] = (float)(((rand()/32767.0)*2-1)/2);
/*隐层阈值初始化 ,-0.01 ~ 0.01 之间*/
printf("\nYU_HN[%d]=%f",k,YU_HN[k]);
}
for(kk=0;kk<ON;kk++) {
YU_ON[kk] = (float)(((rand()/32767.0)*2-1)/2);
/*输出层阈值初始化 ,-0.01 ~ 0.01 之间*/
printf("\nYU_ON[%d]=%f",kk,YU_ON[kk]);
}
printf("\n\n\n\n\nPress any key to start culculating...:\n");
getch();
clrscr();
printf("Please wait...");
return 1;
}
/*第m个学习样本输入子程序*/
input_P(int m)
{ int i;
for(i=0;i<IN;i++) {P[i]=Study_Data[m].input[i];}
return 1;
}
/*第m个样本教师信号子程序*/
input_T(int m)
{int k;
for(k=0;k<ON;k++) {T[k]=Study_Data[m].teach[k];}
return 1;
}
/*求净输入,输出*/
IN_OUT()
{
float sigma1,sigma2;
int i,j,ii,jj;
for(i=0;i<HN;i++)
{
sigma1=0.0;
for(j=0;j<IN;j++)
{sigma1+=W[i][j]*P[j];}/*求隐层内积*/
X[i]=sigma1+YU_HN[i];
H[i]=1.0/(1.0+exp(-X[i]));
}
for(ii=0;ii<ON;ii++)
{
sigma2=0.0;
for(jj=0;jj<HN;jj++)
{sigma2+=V[ii][jj]*H[jj];}
Y[ii]=sigma2+YU_ON[ii];
O[ii]=1.0/(1.0+exp(-Y[ii]));
}
return 1;
}
/*误差分析*/
/*δk*/
int Err_O_H(int m)
{int k;
float abs_err[ON];
float sqr_err=0.0;
for (k=0;k<ON;k++) {
abs_err[k]=T[k]-O[k];
sqr_err+=(abs_err[k])*(abs_err[k]);
d_err[k]=abs_err[k]*O[k]*(1.0-O[k]);
}
err_m[m]=sqr_err/2;
return 1;
}
/*δj*/
int Err_H_I()
{
int j,k;
float sigma;
for(j=0;j<HN;j++) {
sigma=0.0;
for(k=0;k<ON;k++)
{sigma+=d_err[k]*V[k][j];}
e_err[j]=sigma*H[j]*(1-H[j]);
}
return 1;
}
/*总误差*/
float Err_Sum()
{int m;
float total_err=0.0;
for(m=0;m<N;m++)
{total_err+=err_m[m];}
return total_err;
}
/*新旧权值更新量交替--改进型Bp算法*/
saveWV()
{int i;
int ii;
int j;
int jj;
for(i=0;i<HN;i++) {
for(j=0;j<IN;j++)
{old_W[i][j] =b*e_err[i]*P[j];}
}
for(ii=0;ii<ON;ii++){
for(jj=0;jj<HN;jj++)
{old_V[ii][jj] =a*d_err[ii]*H[jj];}
}
return 1;
}
/*更新权值,阈值*/
/*输出层*/
int Delta_O_H(int n,int study)
{int k,j;
if((n<=1)||(study==1))
{
for (k=0;k<ON;k++)
{
for (j=0;j<HN;j++)
{V[k][j]=V[k][j]+a*d_err[k]*H[j];}
YU_ON[k]+=a*d_err[k];
}
}
else
{
for (k=0;k<ON;k++)
{
for (j=0;j<HN;j++)
{V[k][j]=V[k][j]+a*d_err[k]*H[j]+alpha*(V[k][j]-old_V[k][j]);}
YU_ON[k]+=a*d_err[k];
}
}
return 1;
}
/*隐层*/
Delta_H_I(int n,int study)
{int i,j;
if((n<=1)||(study==1))
{
for (j=0;j<HN;j++)
{
for (i=0;i<IN;i++)
{W[j][i]=W[j][i]+b*e_err[j]*P[i];}
YU_HN[j]+=b*e_err[j];
}
}
else
{
for(j=0;j<HN;j++)
{
for(i=0;i<IN;i++)
{W[j][i]=W[j][i]+b*e_err[j]*P[i]+alpha*(W[j][i]-old_W[j][i]);}
YU_HN[j]+=b*e_err[j];
}
}
return 1;
}
/*保存更新*/
void savequan()
{ int i,j,k;
int ii,jj,kk;
/*save weight*/
if((fp=fopen("D:/BP/yundong/weight1.txt","a"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
for(i=0;i<HN;i++)
{for(j=0;j<IN;j++) fprintf(fp,"W[%d][%d]=%f\n",i,j,W[i][j]); }
fprintf(fp,"\n");
for(ii=0;ii<ON;ii++)
{for(jj=0;jj<HN;jj++) fprintf(fp,"V[%d][%d]=%f\n",ii,jj,V[ii][jj]);}
fclose(fp);
printf("\nThe result of weight1.txt(quan) has been saved successfully!");
/*save limit*/
if((fp=fopen("D:/BP/yundong/limit1.txt","a"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
for(k=0;k<ON;k++) fprintf(fp,"YU_ON[%d]=%f\n",k,YU_ON[k]);
for(kk=0;kk<HN;kk++) fprintf(fp,"YU_HN[%d]=%f\n",kk,YU_HN[kk]);
fclose(fp);
printf("\nThe result of limit1.txt(yu) has been saved successfully!\n\n\n\n\nPress any key to Test...");
getch();
clrscr();
}
/*读取测试样本*/
GetTestData()
{int i,j,m;
float datr;
if((fp=fopen("D:/BP/yundong/test1.txt","r"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
for(i=0;i<M;i++)
{j=0;
while(j!=(IN+ON)&&fscanf(fp,"%f",&datr)!=EOF)
{if(j>IN-1) Test_Data[i].expect[j-IN]=datr;
else Test_Data[i].input[j]=datr;
j++;
}
}
fclose(fp);
printf("\nThere are [%d] test datas that have been loaded successfully!\n",M*(IN+ON));
printf("\nShow the data which has been loaded as follows:\n");
for(m=0;m<M;m++)
{for(i=0;i<IN;i++)
{printf("Test__Data[%d].input[%d]=%f\n",m,i,Test_Data[m].input[i]);}
for(j=0;j<ON;j++)
{printf("Test__Data[%d].expec[%d]=%f\n",m,j,Test_Data[m].expect[j]);}
}
printf("\nPress any key to culculating...");
getch();
clrscr();
return 1;
}
/*样本测试及结果*/
Test()
{int i,j,k,m,l;
float net1[HN],net2[ON],H_net[HN],O_net[ON];
for(m=0;m<M;m++)
{for(i=0;i<HN;i++)
{net1[i]=0.0;
for(j=0;j<IN;j++)
{net1[i]+=Test_Data[m].input[j]*W[i][j];
}
net1[i]=net1[i]+YU_HN[i];
H_net[i]=1.0/(1.0+exp(-net1[i]));
}
for(k=0;k<ON;k++)
{net2[k]=0.0;
for(j=0;j<HN;j++)
{net2[k]+=H_net[j]*V[k][j];
}
net2[k]=net2[k]+YU_ON[k];
O_net[k]=1.0/(1.0+exp(-net2[k]));
printf("\nTest result[%d]=%f\n",m,O_net[k]);
}
}
printf("\nShow the expect data as follows:\n");
for(m=0;m<M;m++)
{
for(l=0;l<ON;l++)
{printf("Test__Data[%d].expec[%d]=%f\n",m,l,Test_Data[m].expect[l]);}
}
printf("\nshow the relative error as follows:\n");
for(m=0;m<M;m++)
{
for(l=0;l<ON;l++)
{printf("relative error[%d]=%f\n",m,fabs(Test_Data[m].expect[l]-O_net[l])/Test_Data[m].expect[l]);}
}
}
/*主程序*/
void main()
{float Pre_error;
float sum_err;
long int study;
long int flag;
int n=1;/*n=1:普通Bp算法;n=2:改进型Bp算法*/
flag=200000;
a=0.5;
b=0.5;
alpha=0.5;
study=0;
Pre_error=0.001;/*可接受误差*/
GetTrainingData();
initial();
do
{int m;
++study;
for(m=0;m<N;m++)
{input_P(m);
input_T(m);
IN_OUT();
Err_O_H(m);
Err_H_I();
Delta_O_H(n,study);
Delta_H_I(n,study);
saveWV();
}
sum_err=Err_Sum();
if(study>flag)
{
printf("\n*******************************\n");
printf("The program is ended by itself because of error!\nThe learning times is surpassed!\n");
printf("*****************************\n");
getch();
break;
}
}while (sum_err>Pre_error);
printf("\n****************\n");
printf("\nThe program have studyed for [%ld] times!\n",study);
printf("总误差为:%f/n",sum_err);
printf("\n****************\n");
savequan(); /*save the results*/
GetTestData();
printf("\nThe Result of the Test As follows:\n");
Test();
}
㈥ 前馈神经网络(BP算法)和后馈神经网络(优化) 要求C语言实现!
这个太难了撒,只会用C编什么运算之类的,无能为力,惭愧啊
㈦ 请教C语言高手,关于神经网络
哥们你太牛X了!!
㈧ BP神经网络的预测(回归)过程C语言程序
神经网络本质也是一种数据回归模型。我们举个简单的例子
y=ax^2+bx+c,
有三个系数要回归,如果只给你1~2组数据,你觉得能回归好吗?
考虑到样本本身有误差,为了防止过拟合(或过学习),一般要求神经网络的训练样本数是连接权系数(包括阈值)的2~3倍。你用了太多的连接权系数(包括阈值),即使效果不错,风险仍然很高。
㈨ 你好,请问你有用C语言写的用BP神经网络去逼近一个函数的程序吗
你好,我没有用c写过,但是推荐你一个网站,上面有很多http://www.pudn.com/,程序员联合开发网
㈩ 关于人工神经网络(ANN)的编程(c)
我不懂什么落石,既然要用c语言做神经网络其实过程很麻烦,神经网络里有很多矩阵的运算,比如转置,求逆,所以需要非常熟悉矩阵运算,毕竟不是在matlab里那样调用函数,我个人感觉直接用c会太麻烦,可以在PC上先用matlab或者借助一些专业的神经网络库软件训练好参数,也就是样本离线训练,训练好的权值放入嵌入式c语言里就可以了,计算量还是蛮大的,我以前用c写过一些辨识的,用c写矩阵运算 高斯消元法是精髓