BP神經網路 c 實現

2021-08-02 11:19:15 字數 2096 閱讀 2321

bp神經網路是通過反向傳播來逐漸修正層之間的權值和每個節點的閾值,可以通過學習率避免走入區域性最優解。

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define layer 3 //三層神經網路

#define num 10 //每層的最多節點數

#define a 30.0

#define b 10.0 //a和b是s型函式的引數

#define iters 10000 //最大訓練次數

#define lr 0.0013 //學習率

#define error 0.1 //單個樣本允許的誤差

struct data ;

class bp;

//獲取訓練所有樣本資料

void bp::getdata(const

vector

_data)

//開始進行訓練

void bp::train()

}printf("this is the %d th trainning network !\n", iter);

double accu = getaccu();

printf("all samples accuracy is %lf\n", accu);

}printf("the bp network train end!\n");

}//根據訓練好的網路來**輸出值

vector

bp::forecast(const

vector

data)

//獲取網路節點數

void bp::getnums()

//初始化網路

void bp::initnetwork()

//工作訊號正向傳遞子過程

void bp::forwardtransfer()

//計算輸出層各節點的輸出值

for(int j = 0; j < ou_num; j++)

}//計算單個樣本的誤差

double bp::geterror(int cnt)

//誤差訊號反向傳遞子過程

void bp::reversetransfer(int cnt)

//計算所有樣本的精度

double bp::getaccu()

return ans / num;

}//計算調整量

void bp::calcdelta(int cnt)

}//根據計算出的調整量對bp網路進行調整

void bp::updatenetwork()

for(int i = 0; i < ou_num; i++)

b[2][i] -= lr * d[2][i];

//輸入層和隱含層之間權值和閾值調整

for(int i = 0; i < in_num; i++)

for(int j = 0; j < hd_num; j++)

w[1][i][j] -= lr * d[1][j] * x[0][i];

for(int i = 0; i < hd_num; i++)

b[1][i] -= lr * d[1][i];

}//計算sigmoid啟用函式的值

double bp::sigmoid(const

double x)

int main()

for(int i = 0; i < 200; i++)

fclose(fptrain);

bp *bp = new bp();

bp->getdata(data);

bp->train();

for(int i = 0; i < 60; i++)

fclose(fptest);

return

0;}

C 實現神經BP神經網路

bp.h pragma once include include include include include using std vector using std exp using std cout using std endl class bp bp.cpp include bp.h bp ...

C 實現神經BP神經網路

bp.h pragma once include include include include include using std vector using std exp using std cout using std endl class bp bp.cpp include bp.h bp ...

BP神經網路

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