版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Bp神經(jīng)網(wǎng)絡(luò)+C++實(shí)現(xiàn)
0前言
神經(jīng)網(wǎng)絡(luò)在我印象中一直比較神秘,正好最近學(xué)習(xí)了神經(jīng)網(wǎng)絡(luò),
特別是對Bp神經(jīng)網(wǎng)絡(luò)有了比較深入的了解,因此,總結(jié)以下心得,希
望對后來者有所幫助。
神經(jīng)網(wǎng)絡(luò)在機(jī)器學(xué)習(xí)中應(yīng)用比較廣泛,比如函數(shù)逼近,模式識別,
分類,數(shù)據(jù)壓縮,數(shù)據(jù)挖掘等領(lǐng)域。神經(jīng)網(wǎng)絡(luò)本身是一個(gè)比較龐大的
概念,從網(wǎng)絡(luò)結(jié)構(gòu)類別來劃分,大概有:多層前饋神經(jīng)網(wǎng)絡(luò)、徑向基
函數(shù)網(wǎng)絡(luò)(RBF)、自適應(yīng)諧振理論網(wǎng)絡(luò)(ART)、自組織映射網(wǎng)絡(luò)
(SOM)、級聯(lián)相關(guān)網(wǎng)絡(luò)、Elman網(wǎng)絡(luò)、Boltzmann機(jī)、受限
Boltzmann機(jī)等等。
下面一張圖是最近比較流行的網(wǎng)絡(luò)結(jié)構(gòu):
Amostlycompletechartof
OBackfedInputCell
NeuralNetworksDeepFeedForward(OFF)
InputCell02016FjodorvanVeen-
△NoisyInputCell
Perceptron(P)FeedForward(FF)FadialBasisNetwork(RBF)
?HiddenCell
OProbablisticHiddenCell
△SpikingHiddenCell
GatedRecurrentUnit(GRU)
OutputCell
OMatchInputOutputCell
?RecurrentCell
OMemoryCell
AutoEncoder(AE)VariationalAE(VAE)DenoisingAE(DAE)SparseAE(SAE)
DifferentMemoryCell
Kernel
ConvolutionorPool
MarkovChain(MC)HopfieldNetwork(HN)BoltzmannMachine(BM)RestrictedBM(RBM)DeepBeliefNetwork(DBN)
DeepConvolutionalNetwork(DCN)DeconvolutionalNetwork(DN)DeepConvolutionalInverseGraphicsNetwork(OCIGN)
GenerativeAdversarialNetwork(GAN)liquidStateMachine(LSM)ExtremeLearningMachine(ELM)EchoStateNetwork(ESN)
DeepResidualNetwork(CRN)KohonenNetwork(KN)SupportVectorMachine(SVM)NeuralTuringMachine(NTM)
今天我們要介紹的是Bp神經(jīng)網(wǎng)絡(luò),準(zhǔn)確的說是采用Bp算法進(jìn)行
訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò),Bp算法應(yīng)用比較廣泛。
1基本概念:
1.1神經(jīng)元模型
機(jī)器學(xué)習(xí)中所談?wù)摰纳窠?jīng)網(wǎng)絡(luò)源于生物上的神經(jīng)網(wǎng)絡(luò),實(shí)際上指
的是〃神經(jīng)網(wǎng)絡(luò)〃與〃機(jī)器學(xué)習(xí)〃的交叉部分,一個(gè)最簡單的M-P神
經(jīng)元模型如下圖所示:
\4=1
該神經(jīng)元收到來自其他n個(gè)輸入神經(jīng)元傳遞過來的輸入信號(加
權(quán)和的形式),然后將其與神經(jīng)元的閾值進(jìn)行比較,通過激活函數(shù)進(jìn)
行處理,產(chǎn)生神經(jīng)元的輸出。
1.2常用激活函數(shù)
激活函數(shù)的作用是對其他所有神經(jīng)元傳過來的所有信號加權(quán)和進(jìn)
行處理,產(chǎn)生神經(jīng)元輸出。
下圖是常用的激活函數(shù),最簡單的是:階躍函數(shù),它簡單,最理
想,但是性質(zhì)最差(不連續(xù)/不光滑),因此在實(shí)際中,最常用的是
Sigmoid函數(shù)。
PlotEquationDerivative
Identity/f(c)=Xrs)=i
/
/..Wv=f0forx<0w/_fofor工a0
Binarystep_r_zt1forx>Q,⑺x龍(?for工=0
Logistic(a.k.a
)-l+LAx)=/(z)(l-/(z))
Softstep)人工
2
Tarfl/(工)=tanh(x)=2,1/")=1-/(x)2
1If
ArcTan/(1)=tan-1(z),⑺-工2+i
Rectified
“、f0forz<0...x(0forx<0
LinearUnit=tzforz>0/(X)=l1forz>0
(ReLU)
Parapeteric
a
Rectified//、(axforz<0f>\-fx<0
//(X)=lzforz>0(x
LinearUnit/㈤-(1forx>0
(PReLU)121/
Exponentialx
f>(Tx-Jf()+°hr4V。
LinearUnit八)-(1forx>0
(EUD⑶
70/、1/4.X\…1
1.3前饋神經(jīng)網(wǎng)絡(luò)
多層前饋神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確定義:每一層神經(jīng)元與下一層神經(jīng)元全
互連,神經(jīng)元之間不存在同層連接,不存在跨層連接,如下圖所示就
是一個(gè)經(jīng)典的前饋神經(jīng)網(wǎng)絡(luò),
(隨便插一句,當(dāng)神經(jīng)網(wǎng)絡(luò)中隱層數(shù)越來越多,達(dá)到8-9層E寸,
就變成了一個(gè)深度
學(xué)習(xí)模型,我曾在一篇論文中看到網(wǎng)絡(luò)結(jié)構(gòu)有達(dá)128層的,關(guān)于
下面這塊,下面還會再敘述)O
2.標(biāo)準(zhǔn)Bp算法
2.0關(guān)于梯度
首先我們應(yīng)該清楚,一個(gè)多元函數(shù)的梯度方向是該函數(shù)值增大最
陡的方向。具體化到1元函數(shù)中時(shí),梯度方向首先是沿著曲線的切線
的,然后取切線向上增長的方向?yàn)樘荻确较颍?元或者多元函數(shù)中,梯
度向量為函數(shù)值f對每個(gè)變量的導(dǎo)數(shù),該向量的方向就是梯度的方向,
當(dāng)然向量的大小也就是梯度的大小。
梯度下降法(steepestdescendmethod)用來求解表達(dá)式最大或
者最小值的,屬于無約束優(yōu)化問題。梯度下降法的基本思想還是挺簡
單的,現(xiàn)假設(shè)我們要求函數(shù)f的最小值,首先得選取一個(gè)初始點(diǎn)后,然
后下一個(gè)點(diǎn)的產(chǎn)生時(shí)是沿著梯度直線方向,這里是沿著梯度的反方向
(因?yàn)榍蟮氖亲钚≈?,如果是求最大值的話則沿梯度的正方向即可),如
2.1神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程
神經(jīng)網(wǎng)絡(luò)在外界輸入樣本的刺激下不斷改變網(wǎng)絡(luò)的連接權(quán)值,以使
網(wǎng)絡(luò)的輸出不斷地接近期望的輸出,講幾個(gè)要點(diǎn):
(1)學(xué)習(xí)過程可以簡述為:
(2)學(xué)習(xí)的本質(zhì):對各連接權(quán)值以及所有功能神經(jīng)元的閾值動
態(tài)調(diào)整
注:可以將權(quán)值與閾值的學(xué)習(xí)統(tǒng)一為權(quán)值的學(xué)習(xí),即將閾值看成
一個(gè)〃啞節(jié)點(diǎn)〃,如下圖所示:
(3)權(quán)值調(diào)整規(guī)則:即在學(xué)習(xí)過程中網(wǎng)絡(luò)中各神經(jīng)元的連接權(quán)
變化所依據(jù)的一定的調(diào)整規(guī)則,(Bp算法中權(quán)值調(diào)整采用的是梯度下
降策略,下面會詳細(xì)介紹)
Bp網(wǎng)絡(luò)的學(xué)習(xí)流程如下圖所示:
(百度圖庫里搜的,能說明問題就行)
2.2權(quán)值調(diào)整策略:
首先說明一句』神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)屬于監(jiān)督學(xué)習(xí)的范疇。每輸入一個(gè)
樣本,進(jìn)行正向傳播(輸入層一隱層一輸出層),得到輸出結(jié)果以后,計(jì)
算誤差,達(dá)不到期望后,將誤差進(jìn)行反向傳播(輸出層一隱層一輸入
層),采用梯度下降策略對所有權(quán)值和閾值進(jìn)行調(diào)整。
對訓(xùn)練例(耿,如),假定神經(jīng)網(wǎng)絡(luò)的輸出為yk=(片次…4),即
-=/(-一%),
則網(wǎng)絡(luò)在{xk,yk)上的均方誤差為
g_1'、/八"?.*、2
注:上面的Ek是根據(jù)第k個(gè)樣本數(shù)據(jù)算出的誤差,可以看出:標(biāo)
準(zhǔn)Bp算法每次迭代更新只針對單個(gè)樣例。
權(quán)值與閾值的調(diào)整公式如下:
(D采用感知機(jī)學(xué)習(xí)規(guī)則:VV
(2)梯度下降法:即以訓(xùn)練樣本被錯分的程度為目標(biāo)函數(shù),訓(xùn)練中每次出現(xiàn)錯誤時(shí)便使權(quán)系
數(shù)朝著目標(biāo)函數(shù)相對于權(quán)系數(shù)負(fù)梯度方向更新,知道目標(biāo)中沒有被錯分的樣本為止。
△w》=rjgjbh9j=/(1一磅)域-Vj)
△%=-V9jif
絹:--若微?需仆“一
△。訪=TJChXi,
QR.
△7h=-T)eh,瓦力=":學(xué)習(xí)率"
:十.1-右二?止匕:出東V/\小且工M人玨+皿山WzGA+n田詼苴工后二大T玨
上述公式的詳細(xì)推導(dǎo)過程見下圖:
篇標(biāo)本,舔力余乂夕八燈…
蝌及二彳⑹叫)
-E"舂笊-獷.
r,夕J-,
俸的栩酬移*
①dWq
也二"刀繇購惡二埠??巡必
J2的,??"5的Mj.叼
二陰7;),電-M〉bh
二瓶1-曲途琴心/
”人力?4lVhi二”丁,9,Zi_0F,/髡一曲b二刀9;b,,
訂年二2劭-%).
Q)Av7h.'\,
42萬瑞,楚歌二囁■賽篇二琳加巨產(chǎn)由—M
統(tǒng)林東二者端*二者須打一^^1臺網(wǎng)句人心)X;
:收入?、/少卜二k力瑞;二一力務(wù)w^.%b力"b力)冷’
\二力l^cHh^whj^jXf.^.ne^]
:----------------Y,
:助
y崢f翳火崎二寄?瑞二-哈力伽物
.二W-外)曾,中
彳3=〉/用二一力金,I-95(小■賽)--力加
'防/的4金
c..^.、U、,__lZ
2.3BP神經(jīng)網(wǎng)絡(luò)總結(jié)
(1)BP神經(jīng)網(wǎng)絡(luò)一般用于分類或者逼近問題。
如果用于分類,則激活函數(shù)一般選用Sigmoid函數(shù)或者硬極限函
數(shù),如果用于函數(shù)逼近,則輸出層節(jié)點(diǎn)用線性函數(shù)。
(2)BP神經(jīng)網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)時(shí)可以采用增量學(xué)習(xí)或者批量學(xué)習(xí)。
一增量學(xué)習(xí)要求輸入模式要有足夠的隨機(jī)性,對輸入模式的噪聲
比較敏感,即對于劇烈變化的輸入模式,訓(xùn)練效果比較差,適合在線
處理。
一批量學(xué)習(xí)不存在輸入模式次序問題,穩(wěn)定性好,但是只適合離
線處理。
(3)如何確定隱層數(shù)以及每個(gè)隱含層節(jié)點(diǎn)個(gè)數(shù)
Pre隱含層節(jié)點(diǎn)個(gè)數(shù)不確定,那么應(yīng)該設(shè)置為多少才合適呢(隱含
層節(jié)點(diǎn)個(gè)數(shù)的多少對神經(jīng)網(wǎng)絡(luò)的性能是有影響的)?
有一個(gè)經(jīng)驗(yàn)公式可以確定隱含層節(jié)點(diǎn)數(shù)目:
h=y/m+n+a
.(其中h:隱含層節(jié)點(diǎn)數(shù)目,m:為輸入層節(jié)點(diǎn)數(shù)目,n:為輸出層
節(jié)點(diǎn)數(shù)目,a:為之間的調(diào)節(jié)常數(shù))。
2.4標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)的缺陷
(1)容易形成局部極小值而得不到全局最優(yōu)值。
(采用梯度下降法),如果僅有一個(gè)局部極小值二〉全局最小,多
個(gè)局部極小二〉不一定全局最小。這就要求對初始權(quán)值和閥值有要求,
要使得初始權(quán)值和閥值隨機(jī)性足夠好,可以多次隨機(jī)來實(shí)現(xiàn)。
(2)訓(xùn)練次數(shù)多使得學(xué)習(xí)效率低,收斂速度慢。
每次更新只針對單個(gè)樣本;不同樣例出現(xiàn)〃抵消〃現(xiàn)象。
(3)過擬合問題
通過不斷訓(xùn)練,訓(xùn)練誤差達(dá)到很低,但測試誤差可能會上升(泛
化性能差).
解決策略:
1,〃早停〃:
即將樣本劃分成訓(xùn)練集和驗(yàn)證集,訓(xùn)練集用來算梯度,更新權(quán)值
和閾值,驗(yàn)證集用來估計(jì)誤差,當(dāng)訓(xùn)練集誤差降低而驗(yàn)證集誤差升高
時(shí)就停止訓(xùn)練,返回具有最小驗(yàn)證集誤差的權(quán)值和閾值。
2,〃正則化方法〃:
_tm(v***'CSLUS人
,即在誤差目標(biāo)中增加一個(gè)用于描述網(wǎng)絡(luò)復(fù)雜程度的部分,其中
參數(shù)人常用交叉驗(yàn)證來確定。
2.5BP算法的改進(jìn)
(1)累積BP算法
目的:為了減小整個(gè)訓(xùn)練集的全局誤差,而不針對某一特定樣本
1/W?
B*4rL乙A..9\Lr?
(更新策略做相應(yīng)調(diào)整)
(2)利用動量法改進(jìn)BP算法
(標(biāo)準(zhǔn)Bp學(xué)習(xí)過程易震蕩,收斂速度慢)
增加動量項(xiàng),引入動量項(xiàng)是為了加速算法收斂,即如下公式:
a為動量系數(shù),通常0<a<0.9o
(3)自適應(yīng)調(diào)節(jié)學(xué)習(xí)率n
調(diào)整的基本指導(dǎo)思想是:在學(xué)習(xí)收斂的情況下,增大n,以縮短學(xué)
習(xí)時(shí)間;當(dāng)n偏大致使不能收斂(即發(fā)生震蕩)時(shí),要及時(shí)減小n,直
到收斂為止。
3工程搭建與C++實(shí)現(xiàn)
實(shí)驗(yàn)平臺:vs2013
項(xiàng)目包含文件:
個(gè)>QKK(H:)>BpNet>Bphet>
項(xiàng)目流程如下圖所示:
初始化網(wǎng)絡(luò)結(jié)構(gòu)
(3層前饋神經(jīng)網(wǎng)絡(luò))
用測試數(shù)據(jù)測試
(1)Bp.h
#ifndef_BP_H_
#define_BP_H_
#include<vector>
〃參數(shù)設(shè)置
#defineLAYER3〃三層神經(jīng)網(wǎng)絡(luò)
#defineNUM10〃每層的最多節(jié)點(diǎn)數(shù)
#defineA30.0
#defineB10.0//A和B是S型函數(shù)的參數(shù)
#defineITERS1000〃最大訓(xùn)練次數(shù)
#defineETA_W0.0035〃權(quán)值調(diào)整率
#defineETA.B0.001〃閥值調(diào)整率
#defineERROR0.002〃單個(gè)樣本允許的誤差
#defineACCU0.005〃每次迭代允許的誤差
〃類型
#defineTypedouble
#defineVectorstd::vector
structData
(
Vector<Type>x;〃輸入屬性
Vector<Type>y;〃輸出屬性
);
classBP{
public:
voidGetData(constVector<Data>);
voidTrain();
Vector<Type>ForeCast(constVector<Type>);
voidForCastFromFile(BP*&);
voidReadFile(constchar*InutFileNamejntm,intn);
voidReadTestFile(constchar*InputFileName,intmzintn);
voidWriteToFile(constchar*OutPutFileName);
private:
voidInitNetWorkO;〃初始化網(wǎng)絡(luò)
voidGetNumsO;〃獲取輸入、輸出和隱含層節(jié)點(diǎn)數(shù)
voidForwardTransfer();〃正向傳播子過程
voidReverseTransfer(int);〃逆向傳播子過程
voidCalcDelta(int);〃計(jì)算w和b的調(diào)整量
voidUpdateNetWork();〃更新權(quán)值和閥值
TypeGetError(int);〃計(jì)算單個(gè)樣本的誤差
TypeGetAccuQ;〃計(jì)算所有樣本的精度
TypeSigmoid(constType);〃計(jì)算Sigmoid的值
voidsplit(char*bufferzVector<Type>&vec);
private:
intin_num;〃輸入層節(jié)點(diǎn)數(shù)
intou_num;〃輸出層節(jié)點(diǎn)數(shù)
inthd_num;〃隱含層節(jié)點(diǎn)數(shù)
Vector<Data>data;〃樣木數(shù)據(jù)
Vector<Vector<Type>>testdata;〃測試數(shù)據(jù)
Vector<Vector<Type>>result;〃測試結(jié)果
introwLen;〃樣本數(shù)量
intrestrowLen;〃測試樣本數(shù)量
Typew[LAYER][NUM][NUM];//BP網(wǎng)絡(luò)的權(quán)值
Typeb[LAYER][NUM];//BP網(wǎng)絡(luò)節(jié)點(diǎn)的閥值
Typex[LAYER][NUM];〃每個(gè)神經(jīng)元的值經(jīng)S型函數(shù)轉(zhuǎn)化后
的輸出值,輸入層就為原值
Typed[LAYER][NUM];〃記錄delta學(xué)習(xí)規(guī)則中delta的值,
使用delta規(guī)則來調(diào)整聯(lián)接權(quán)重Wij(t+l)=Wij(t)+a(Yj-Aj(t))Oi(t)
);
#endif//_BP_H_
(2)Bp.cpp
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<assert.h>
#include<cstdlib>
#include<fstream>
#include<iostream>
usingnamespacestd;
#include"Bp.h"
〃獲取訓(xùn)練所有樣本數(shù)據(jù)
voidBP::GetData(constVector<Data>_data)
data=_data;
)
voidBP::split(char*bufferzVector<Type>&vec)
(
char*p=strtok(buffer,"z");/At
while(p!=NULL)
(
vec.push_back(atof(p));
p=strtok(NULL/"\n");
)
)
voidBP::ReadFile(constchar*InutFileName,intmJntn)
(
FILE*pFile;
//Test
//pFile=fopen("D:\\testSet.txt\"r");
M
pFile=fopen(InutFileNamez"r);
if(!pFile)
(
printf("openfile%sfailed...\n"/InutFileName);
exit(O);
)
//initdataSet
char*buffer=newchar[100];
Vector<Type>temp;
while(fgets(buffer,100,pFile))
(
Datat;
temp.clearO;
split(bufferztemp);
//data[x].push_back(temp);
for(inti=0;i<temp.size();i++)
(
if(i<m)
t.x.push_back(temp[i]);
else
t.y.push_back(temp[i]);
)
data.push_back(t);
)
//initrowLen
rowLen=data.size();
)
voidBP::ReadTestFile(constchar*InputFileName,intm,int
n)
(
FILE*pFile;
pFile=fopen(InputFileName,"r");
if(IpFile)
printf("openfile%sfailed...\n"/InputFileName);
exit(O);
)
//initdataSet
char*buffer=newchar[100];
Vector<Type>temp;
while(fgets(buffer,100,pFile))
(
Vector<Type>t;
temp.clearO;
split(bufferztemp);
for(inti=0;i<temp.size();i++)
(
t.push_back(temp[i]);
)
testdata.push_back(t);
)
restrowLen=testdata.size();
)
voidBP::WriteToFile(constchar*OutPutFileName)
(
ofstreamfout;
fout.open(OutPutFileName);
if(!fout)
cout<<"fileresult.txtopenfailed"<<endl;
exit(O);
)
Vector<Vector<Type>>::iteratorit=testdata.begin();
Vector<Vector<Type>>::iteratoritx=result.begin();
while(it!=testdata.end())
(
Vector<Type>::iteratoritt=(*it).begin();
Vector<Type>::iteratorittx=(*itx).begin();
while(itt!=(*it).end())
(
fout<<(*itt)<<
itt++;
)
fout<<"\t";
while(ittx!=(*itx).end())
(
fout<<(*ittx)<<
ittx++;
)
it++;
itx++;
fout<<"\n";
)
)
〃開始進(jìn)行訓(xùn)練
voidBP::Train()
printf("BegintotrainBPNetWork!\n");
GetNums();
InitNetWork();
intnum=data.sizeQ;
for(intiter=0;iter<=ITERS;iter++)
(
for(intent=0;ent<num;cnt++)
(
〃第一層輸入節(jié)點(diǎn)賦值
for(inti=0;i<in_num;i++)
x[0][i]=data.at(cnt).x[i];
while(1)
(
ForwardTransfer();
if(GetError(cnt)<ERROR)〃如果誤差比較小,則針對單個(gè)樣
本跳出循環(huán)
break;
ReverseTransfer(cnt);
)
)
printf("Thisisthe%dthtrainningNetWork!\n"ziter);
Typeaccu=GetAccuQ;〃每一輪學(xué)習(xí)的均方誤差E
printf("AIISamplesAccuracyis%lf\n"/accu);
if(accu<ACCU)break;
)
printf("TheBPNetWorktrainEnd!\n");
)
〃根據(jù)訓(xùn)練好的網(wǎng)絡(luò)來預(yù)測輸出值
Vector<Type>BP::ForeCast(constVector<Type>data)
(
intn=data.sizeO;
assert(n==in_num);
for(inti=0;i<in_num;i++)
x[0][i]=data[i];
ForwardTransfer();
Vector<Type>v;
for(inti=0;i<ou_num;i++)
v.push_back(x[2][i]);
returnv;
)
voidBP::ForCastFromFile(BP*&pBp)
(
Vector<Vector<Type>>::iteratorit=testdata.begin();
Vector<Type>ou;
while(it!=testdata.end())
(
ou=pBp->ForeCast(*it);
result.push_back(ou);
it++;
)
)
〃獲取網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)
voidBP::GetNums()
(
in_num=data[O].x.size();〃獲取輸入層節(jié)點(diǎn)數(shù)
ou.num=data[O].y.size();〃獲取輸出層節(jié)點(diǎn)數(shù)
hd_num=(int)sqrt((in_num+ou_num)*1.0)+5;〃獲取隱
含層節(jié)點(diǎn)數(shù)
if(hd_num>NUM)hd_num=NUM;〃隱含層數(shù)
目不能超過最大設(shè)置
)
〃初始化網(wǎng)絡(luò)
voidBP::InitNetWork()
(
memset(wz0,sizeof(w));〃初始化權(quán)值和閥值為0,也可以初
始化隨機(jī)值
memset(bz0,sizeof(b));
)
〃工作信號正向傳遞子過程
voidBP::ForwardTransfer()
(
〃計(jì)算隱含層各個(gè)節(jié)點(diǎn)的輸出值
for(intj=0;j<hd_num;j++)
(
Typet=0;
for(inti=0;i<in_num;i++)
t+=w[l][i][j]*x[0][i];
t+=b[l][j];
x[l][j]=Sigmoid(t);
)
〃計(jì)算輸出層各節(jié)點(diǎn)的輸出值
for(intj=0;j<ou_num;j++)
(
Typet=0;
for(inti=0;i<hd_num;i++)
t+=w[2][i][j]*x[l][i];
t+=b[2][j];
x[2][j]=Sigmoid(t);
)
)
〃計(jì)算單個(gè)樣本的誤差
TypeBP::GetError(intent)
(
Typeans=0;
for(inti=0;i<ou_num;i++)
ans+=0.5*(x[2][i]-data.at(cnt).y[i])*(x[2][i]
data.at(cnt).y[i]);
returnans;
)
〃誤差信號反向傳遞子過程
voidBP::ReverseTransfer(intent)
CalcDelta(cnt);
UpdateNetWork();
)
〃計(jì)算所有樣本的精度
TypeBP::GetAccu()
(
Typeans=0;
intnum=data.size();
for(inti=0;i<num;i++)
(
intm=data.at(i).x.size();
for(intj=0;j<m;j++)
x[0][j]=data.at(i).x[j];
ForwardTransfer();
intn=data.at(i).y.size();〃樣本輸出的維度
for(intj=0;j<n;j++)
ans+=0.5*(x[2][j]-data.at(i).y[j])*(x[2][j]-data.at(i).y[j]);//
對第i個(gè)樣本算均方誤差
)
returnans/num;
〃計(jì)算調(diào)整量
voidBP::CalcDelta(intent)
(
〃計(jì)算輸出層的delta值
for(inti=0;i<ou_num;i++)
d[2][i]=(x[2][i]-data.at(cnt).y[i])*x[2][i]*(A-x[2][i])/(A*
B);
〃計(jì)算隱含層的delta值
for(inti=0;i<hd_num;i++)
Typet=0;
for(intj=0;j<ou_num;j++)
t+=w[2][i][j]*d[2][j];
d[l][i]=t*x[l][i]*(A-x[l][i])/(A*B);
)
)
〃根據(jù)計(jì)算出的調(diào)整量對BP網(wǎng)絡(luò)進(jìn)行調(diào)整
voidBP::UpdateNetWork()
(
〃隱含層和輸出層之間權(quán)值和閥值調(diào)整
for(inti=0;i<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年昆明元朔建設(shè)發(fā)展有限公司收費(fèi)員招聘9人備考題庫帶答案詳解
- 安鋼總醫(yī)院2026年度招聘25人備考題庫含答案詳解
- 2025年青海物產(chǎn)爆破技術(shù)服務(wù)有限公司招聘備考題庫及完整答案詳解一套
- 2025年跨境電商物流體系建設(shè)與優(yōu)化報(bào)告
- 高中生運(yùn)用地理信息系統(tǒng)模擬城市綠地降溫效應(yīng)對局部微氣候影響的課題報(bào)告教學(xué)研究課題報(bào)告
- 中國煤炭地質(zhì)總局2026年度應(yīng)屆生招聘468人備考題庫及1套參考答案詳解
- 2025年包頭市東河區(qū)教育系統(tǒng)校園招聘教師19人備考題庫(內(nèi)蒙古師范大學(xué)考點(diǎn))含答案詳解
- 2025年陜西上林街道衛(wèi)生院科室?guī)ь^人招聘備考題庫及參考答案詳解一套
- 2025年大理州事業(yè)單位公開考核招聘急需緊缺人才備考題庫及一套參考答案詳解
- 2025年桂林市逸夫小學(xué)招聘教師備考題庫及一套參考答案詳解
- 12J12無障礙設(shè)施圖集
- 百菌齊發(fā)-開啟菇糧時(shí)代知到智慧樹章節(jié)測試課后答案2024年秋漢中職業(yè)技術(shù)學(xué)院
- 膦甲酸鈉的醫(yī)藥市場分析與展望
- 電力市場概論張利課后參考答案
- 中學(xué)語文教學(xué)設(shè)計(jì)智慧樹知到期末考試答案章節(jié)答案2024年河南大學(xué)
- 超市防損培訓(xùn)課件
- 2024年福建省2024屆高三3月省質(zhì)檢(高中畢業(yè)班適應(yīng)性練習(xí)卷)英語試卷(含答案)
- 污水源熱泵技術(shù)RBL北京瑞寶利熱能科技有限公司
- 《精神病》4人搞笑小品劇本臺詞
- 工商銀行全國地區(qū)碼
- 錐齒輪加工工藝和夾具設(shè)計(jì)
評論
0/150
提交評論