Ⅰ 用c語言寫一個神經網路分類器大概要多少行代碼
RBF網路能夠逼近任意的非線性函數,可以處理系統內的難以解析的規律性,具有良好的泛化能力,並有很快的學習收斂速度,已成功應用於非線性函數逼近、時間序列分析、數據分類、模式識別、信息處理、圖像處理、系統建模、控制和故障診斷等。
簡單說明一下為什麼RBF網路學習收斂得比較快。當網路的一個或多個可調參數(權值或閾值)對任何一個輸出都有影響時,這樣的網路稱為全局逼近網路。由於對於每次輸入,網路上的每一個權值都要調整,從而導致全局逼近網路的學習速度很慢。BP網路就是一個典型的例子。
如果對於輸入空間的某個局部區域只有少數幾個連接權值影響輸出,則該網路稱為局部逼近網路。常見的局部逼近網路有RBF網路、小腦模型(CMAC)網路、B樣條網路等。
Ⅱ 你好,請問你有用C語言寫的用BP神經網路去逼近一個函數的程序嗎
你好,我沒有用c寫過,但是推薦你一個網站,上面有很多http://www.pudn.com/,程序員聯合開發網
Ⅲ 有哪本c語言的書上有神經網路的代碼
數字信號處理C語言程序集
第五篇 人工神經網路
Ⅳ c語言實現*/遺傳演算法改進BP神經網路原理和演算法實現怎麼弄
遺傳演算法有相當大的引用。遺傳演算法在游戲中應用的現狀在遺傳編碼時, 一般將瓦片的坐標作為基因進行實數編碼, 染色體的第一個基因為起點坐標, 最後一個基因為終點坐標, 中間的基因為路徑經過的每一個瓦片的坐標。在生成染色體時, 由起點出發, 隨機選擇當前結點的鄰居節點中的可通過節點, 將其坐標加入染色體, 依此循環, 直到找到目標點為止, 生成了一條染色體。重復上述操作, 直到達到指定的種群規模。遺傳演算法的優點:1、遺傳演算法是以決策變數的編碼作為運算對象,可以直接對集合、序列、矩陣、樹、圖等結構對象進行操作。這樣的方式一方面有助於模擬生物的基因、染色體和遺傳進化的過程,方便遺傳操作運算元的運用。另一方面也使得遺傳演算法具有廣泛的應用領域,如函數優化、生產調度、自動控制、圖像處理、機器學習、數據挖掘等領域。2、遺傳演算法直接以目標函數值作為搜索信息。它僅僅使用適應度函數值來度量個體的優良程度,不涉及目標函數值求導求微分的過程。因為在現實中很多目標函數是很難求導的,甚至是不存在導數的,所以這一點也使得遺傳演算法顯示出高度的優越性。3、遺傳演算法具有群體搜索的特性。它的搜索過程是從一個具有多個個體的初始群體P(0)開始的,一方面可以有效地避免搜索一些不必搜索的點。另一方面由於傳統的單點搜索方法在對多峰分布的搜索空間進行搜索時很容易陷入局部某個單峰的極值點,而遺傳演算法的群體搜索特性卻可以避免這樣的問題,因而可以體現出遺傳演算法的並行化和較好的全局搜索性。4、遺傳演算法基於概率規則,而不是確定性規則。這使得搜索更為靈活,參數對其搜索效果的影響也盡可能的小。5、遺傳演算法具有可擴展性,易於與其他技術混合使用。以上幾點便是遺傳演算法作為優化演算法所具備的優點。遺傳演算法的缺點:遺傳演算法在進行編碼時容易出現不規范不準確的問題。
Ⅳ 請教C語言高手,關於神經網路
哥們你太牛X了!!
Ⅵ 前饋神經網路(BP演算法)和後饋神經網路(優化) 要求C語言實現!
這個太難了撒,只會用C編什麼運算之類的,無能為力,慚愧啊
Ⅶ 請問高手,神經網路模型與學習演算法用什麼語言編程比較好JAVA 、C語言還是C++等。謝謝!
神經網路模型?不會是你的課題吧,大型演算法應用(有界面),當然用C++(效率高)來寫,JAVA次之(略簡單)。
學習演算法的精髓就用C,C++和JAVA作為高級語言打包了很多基礎型的演算法。
Ⅷ 急求好用的人工神經網路源程序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語言程序
神經網路本質也是一種數據回歸模型。我們舉個簡單的例子
y=ax^2+bx+c,
有三個系數要回歸,如果只給你1~2組數據,你覺得能回歸好嗎?
考慮到樣本本身有誤差,為了防止過擬合(或過學習),一般要求神經網路的訓練樣本數是連接權系數(包括閾值)的2~3倍。你用了太多的連接權系數(包括閾值),即使效果不錯,風險仍然很高。
Ⅹ 用C語言解決BP神經網路演算法
囧,用C語言幹嘛,matlab裡面帶有神經網路函數庫的……
55555,我的論文也是用神經網路模擬……
我的隱藏層個數都沒確定……輸入節點數也沒有定……
matlab神經網路函數庫的程序,在ilovematlab論壇上有。