/***************************************
* 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 隱含層輸入...