BP神經網路擬合sin

2021-06-06 16:05:37 字數 2306 閱讀 2143

/***************************************

* function:

* 神經網路bp演算法

* lnstree by 2012

****************************************/

#include #include #include #include #include #define ni 1 // 輸入層神經元 的個數

#define nm 4 // 隱藏層神經元 的個數

#define no 1 // 輸出層神經元 的個數

#define l 100 // 學習的樣本個數

#define enom 0.02 // 確定誤差上限,當神經元對待學習樣本的擬合度小於該值時

// 可以認為學習結束

#define loopmax 100000 // 確定最大的迭代次數,當迭代達到loopmax時誤差之後仍大於enom時

// 可以認為學習失敗

#define e 2.71828

double e; // 訓練每輪迭代誤差和

double a, u, n; // bp 的網路引數

double w1[ni][nm], w2[nm][no]; // 網路連線的權值

double d1[ni][nm], d2[nm][no]; // 每輪對連線權值的修正值

double d11[ni][nm], d22[nm][no]; // 對上一輪的連線權值修正,第一輪為0

double pi[l][ni], pm[l][nm], po[l][no]; // 三層神經網路的輸入

double t[l][no]; //神經網路的期望輸出

double xm[l][nm], xo[l][no]; // 隱層和輸出層的神經元輸出

double qm[l][nm], qo[l][no]; // 對應各連線的$值

double a1[ni][nm],a2[nm][no]; // 神經網路的學習率

void proceedr();

void initiate(); // 訓練時呼叫的函式,對神經網路初始話

void proceed(); // 訓練時呼叫的函式,訊號正向傳播

void forq(); // 訓練時呼叫函式, 求誤差偏導,將誤差反傳

void amend(); // 訓練時呼叫的函式, 根據誤差反向傳遞結果修改權值

double newa(double a, double d); // 修改網路學習速率

double cal(double d); // 計算signoid函式值

double vcal(double d); // 計算signoid函式的導數

int main()

if( i >= loopmax)

forq();

amend();

}if (flag > 0)

proceedr();

else

printf("訓練失敗");

for (;;)

}}// 函式定義

void initiate()

for (j = 0; j < no; j++)

}step = 1.0 / l; // 將待訓練的區間等分步長為step

for (i = 0; i < l; i++)

printf("初始化成功\n\n下面對神經網路進行訓練");

}void proceed()

printf("請輸入0,1的值!\n");

for (;;)

}for (i = 0; i < nm; i++)

xm[0][i] = cal(pm[0][i]);

}for (i = 0; i < no; i++)

}output = cal (po[0][0]);

printf("輸入的%20f 對應的結果 %f\n", input, output);

printf("輸入的%20f 正常的的結果 %f\n",input, sin(input));

}}// s型激勵函式

double cal(double d)

// s型激勵函式的導數

double vcal(double d)

double newa(double a, double d)

else

}else if (d < 0)

else

}return a;

}

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...

BP神經網路

bp是back propagation bp神經網路主要的演算法在於誤差反向傳播error backpropagation 有三層 輸入層 input 隱含層 hidden 輸出層 output 輸入層 n個神經元 隱含層 p個神經元 輸出層 q個神經元 輸入向量 x x1,x2,x n 隱含層輸入...