電子信息工程畢業(yè)論文改進型bp神經網絡在人臉識別中的應用_第1頁
已閱讀1頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  深 圳 大 學</b></p><p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  改進型BP神經網絡在人臉識別中的應用</p><p>  所在學院

2、 </p><p>  專業(yè)班級 電子信息工程 </p><p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月

3、 </p><p>  深圳大學本科畢業(yè)論文(設計)誠信聲明</p><p>  本人鄭重聲明:所呈交的畢業(yè)論文(設計),題目《 》 是本人在指導教師的指導下,獨立進行研究工作所取得的成果。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式注明。除此之外,本論文不包含任何其他

4、個人或集體已經發(fā)表或撰寫過的作品成果。本人完全意識到本聲明的法律結果。</p><p>  畢業(yè)論文(設計)作者簽名:</p><p>  日期: 年 月 日</p><p><b>  目 錄</b></p><p><b>  摘要(關鍵詞)1</b></p>

5、<p><b>  1.引言1</b></p><p>  1.1人臉識別綜述1</p><p>  1.2人臉識別的基本方法2</p><p>  1.3人臉識別的應用3</p><p>  2.主成分分析法4</p><p>  2.1主成分分析法概述4</p>

6、;<p>  2.2 K-L變換4</p><p>  2.3主成分分析法及其基本思想與任務5</p><p>  2.4主成分分析法的原理、目的及主成分特點7</p><p>  3. BP神經網絡及其在主成分分析法中的應用7</p><p>  3.1 BP神經網絡概述及其模型與結構7</p><

7、;p>  3.2 BP神經網絡的激活函數、學習規(guī)則及其語言實現(xiàn)8</p><p>  3.3 BP神經網絡的訓練及其設計過程13</p><p>  3.4 BP神經網絡的限制及其改進方法14</p><p>  3.5 主成分分析法的計算步驟及其語言實現(xiàn)17</p><p>  4. 測試過程與結果及軟件的語言實現(xiàn)26<

8、;/p><p>  4.1實驗前期準備的操作26</p><p>  4.2 測試人臉圖庫29</p><p>  4.3保存和讀取BP網絡訓練結果33</p><p>  4.4人臉識別實驗結果展示37</p><p><b>  5. 結束語45</b></p><p

9、><b>  參考文獻47</b></p><p><b>  致謝48</b></p><p>  Abstract(Key words)49</p><p>  改進型BP神經網絡在人臉識別中的應用</p><p>  【摘要】隨著社會的進步,科技的發(fā)展,生活的改善,人類的安全意識也

10、在逐漸提高,因此,人臉識別系統(tǒng)正在引起越來越多人的關注。本文是在BP神經網絡基礎上進行改進,并利用改進型BP神經網絡的優(yōu)秀分析能力,對綜合臉譜進行分析,可以得出臉譜圖像的一般特征,通過C++將這一過程編寫成以軟件的方式體現(xiàn),使得這一研究可以得出相似圖片之間的差別,在人工智能方面,可以對其差別進行分析,并做出相應的指令,特別是在倉庫的智能管理方面非常有益。</p><p>  【關鍵詞】數據挖掘;人臉分析;BP神經

11、網絡;PCA算法;人臉識別軟件;C++編程</p><p><b>  1.引言</b></p><p><b>  1.1人臉識別綜述</b></p><p>  人臉識別,特指利用分析比較人臉視覺特征信息進行身份鑒別的計算機技術。人臉識別是一項熱門的計算機技術研究領域,人臉追蹤偵測,自動調整影像放大,夜間紅外偵測,自動

12、調整曝光強度;它屬于生物特征識別技術,是對生物體(一般特指人)本身的生物特征來區(qū)分生物體個體。近十年來,有關研究表明,人臉特征定位已經成為圖像技術的一個熱點領域,人臉的識別過程一般分三步[1]:</p><p>  (1)首先建立人臉的面像檔案。即用攝像機采集單位人員的人臉的面像文件或取他們的照片形成面像文件,并將這些面像文件生成面紋(Faceprint)編碼貯存起來。</p><p> 

13、 (2)獲取當前的人體面像。即用攝像機捕捉的當前出入人員的面像,或取照片輸入,并將當前的面像文件生成面紋編碼。</p><p>  (3)用當前的面紋編碼與檔案庫存的比對。即將當前的面像的面紋編碼與檔案庫存中的面紋編碼進行檢索比對。上述的“面紋編碼”方式是根據人臉臉部的本質特征和開頭來工作的。這種面紋編碼可以抵抗光線、皮膚色調、面部毛發(fā)、發(fā)型、眼鏡、表情和姿態(tài)的變化,具有強大的可靠性,從而使它可以從百萬人中精確地

14、辯認出某個人。人臉的識別過程,利用普通的圖像處理設備就能自動、連續(xù)、實時地完成。</p><p>  人臉檢測(Face Detection)是一種在任意數字圖像中找到人臉的位置和大小的計算機技術。它可以檢測出面部特征,并忽略諸如建筑物、數目和身體等其他任何東西。有時候,人臉檢測也負責找到面部的細微特征,如眼睛、鼻子、嘴巴等的精細位置。許多算法將人臉檢測實現(xiàn)為一個兩類模式分類任務,也就是說,圖像的指定位置會被轉換

15、為特征,然后一個預先訓練好的分類器將決定該部分是或不是人臉。通常情況下,要用到滑動窗口技術,也就是說,分類器對圖像的任意位置和任意尺寸的部分(通常是正方形或長方形)進行分類,判定是或不是人臉。具有空白和靜態(tài)背景的圖像比較容易處理,如果圖像只包含一個正面人臉的</p><p>  話,只要去除背景后就只剩下人臉了。使用膚色來檢測人臉是比較脆弱的。數據庫可能沒有包含所有皮膚的顏色,同時光照也會影響檢測結果。由于使用色

16、彩分割,具有類似于膚色顏色的非動物物體也會被檢測到。這種方式的優(yōu)點是對于人臉的朝向和尺寸沒有要求,并且一個好的實現(xiàn)可以處理復雜的背景。人臉檢測任務的完成涉及從復雜的背景中分割、抽取、驗證人臉區(qū)域和可能用到的人臉特征。</p><p>  人臉特征定位與提取是人臉模式識別研究的基本問題之一,在特征定位中一般采用的是一種直方圖匹配的方法。由于人眼的灰度特征與人臉其它部位有明顯不同,我們可以用直方圖匹配的方法很容易地得

17、到眼睛的大致位置。對于人臉特征提取而言,抽取有效的圖像特征是完成人臉識別的關鍵。臉部特征檢測, 即在圖像或圖像序列的給定區(qū)域內搜索部分或所有人臉特征(如眼、鼻、嘴、耳等) 的位置、關鍵點或輪廓線。目前用于人臉識別的特征有如下幾種:直觀性特征、灰度的統(tǒng)計特征、變換系數特征、代數特征。人臉識別經常受到人臉圖像數據高維問題的影響,特征提取就是將數據空間變?yōu)樘卣骺臻g,從而達到降維的作用[2]。</p><p>  1.2

18、人臉識別的基本方法</p><p>  人臉識別系統(tǒng)包括兩個主要的技術環(huán)節(jié),先是檢測與定位,即從輸入圖像中找到人臉,將人臉從背景中分離開來,然后再對標準化后的人臉進行特征提取和識別。這兩個環(huán)節(jié)獨立性非常強,所以通常分開討論。</p><p>  關于人臉檢測與定位目前普遍采用的方法有參考模板法、人臉規(guī)則法、樣品學習法、膚色模型法和特征子臉法等5種。而關于特征提取和識別,目前比較常見的則有基

19、于特征向量法和面紋模板法。</p><p>  人臉檢測的算法主要有以下幾種[3]:</p><p><b> ?、賲⒖寄0宸?lt;/b></p><p>  首先設計一個或數個標準人臉的模板,然后計算測試采集的樣品與標準模板之間的匹配程度,并通過閾值來判斷是否存在人臉;</p><p><b> ?、谌四樢?guī)則法&

20、lt;/b></p><p>  由于人臉具有一定的結構分布特征,所謂人臉規(guī)則的方法即提取這些特征生成相應的規(guī)則以判斷測試樣品是否包含人臉;</p><p><b>  ③樣品學習法</b></p><p>  這種方法即采用模式識別中人工神經網絡的方法,即通過對面像樣品集和非面像樣品集的學習產生分類器;</p><p

21、><b>  ④膚色模型法</b></p><p>  這種方法是依據面貌膚色在色彩空間中分布相對集中的規(guī)律來進行檢測。</p><p><b> ?、萏卣髯幽樂?lt;/b></p><p>  這種方法是將所有面像集合視為一個面像子空間,并基于檢測樣品與其在子孔間的投影之間的距離判斷是否存在面像。</p>

22、<p>  特征提取和識別的算法主要有以下兩種[4]:</p><p><b>  ①特征向量法</b></p><p>  該方法是先確定眼虹膜、鼻翼、嘴角等面像五官輪廓的大小、位置、距離等屬性,然后再計算出它們的幾何特征量,而這些特征量形成一描述該面像的特征向量。</p><p><b> ?、诿婕y模板法</b&

23、gt;</p><p>  該方法是在庫中存貯若干標準面像模板或面像器官模板,在進行比對時,將采樣面像所有象素與庫中所有模板采用歸一化相關量度量進行匹配。此外,還有采用模式識別的自相關網絡或特征與模板相結合的方法。</p><p>  1.3 人臉識別的應用 </p><p>  自美國發(fā)生911恐怖襲擊事件以后,世界各國對如何防范恐怖分子、保障民眾安全異常關注,不

24、斷積極尋找有效的身份鑒定方法。另一方面,全球范圍內電子商務已迅速興起,網絡信息安全問題也伴隨而來,安全可靠的網上購物和交易是電字商務進一步發(fā)展的核心問題。而傳統(tǒng)的安全方式如密碼、個人識別碼 (PIN)、磁卡和鑰匙經常被非法盜用或者濫用,因此只能提供有限的保障。</p><p>  人臉識別技術目前在國內的前景非??捎^,已經成功應用到金融、軍工等多個領域,行業(yè)發(fā)展優(yōu)勢明顯,基于現(xiàn)階段的技術與市場現(xiàn)狀,人臉識別的發(fā)展

25、前景十分樂觀。就技術發(fā)展角度來說,首先,人臉識別技術及產品應用將從“室內”走向“室外”。人臉識別系統(tǒng)不僅可以應用于智能預警監(jiān)控上,還可以應用于門禁系統(tǒng)。盜竊案件的發(fā)生也是人們時常擔憂的問題,目前普及的門禁系統(tǒng)僅僅做到通過密碼來防盜,如果可以使人臉識別系統(tǒng)應用于門禁系統(tǒng)上,那么受安全保護的地區(qū)可以通過人臉識別辨識試圖進入者的身份,安全等級將大幅度提高。由此可見人臉識別目前在大多數領域中起到舉足輕重的作用,尤其是用在機關單位的安全和考勤、網

26、絡安全、銀行、海關邊檢、物業(yè)管理、軍隊安全、智能門禁、計算機登錄系統(tǒng)。我國在這方面也取得了較好的成就,國家863項目“面像檢測與特征定位核心技術”通過成果鑒定并初步應用,就標志著我國在人臉識別這一當今熱點科研領域掌握了一定的核心技術。</p><p>  隨著多媒體技術的發(fā)展,人們的生活得到改善,在生活更便利的同時,人們的安全防范意識也越來越高。人臉識別是當前生物特征識別研究的熱點之一,逐漸成為人們研究的焦點,目

27、前的人臉識別方法主要集中在二維圖像方面,由于受到光照、姿勢、表情變化的影響,識別的準確度受到很大限制。針對人臉識別的難點,一個較好的辦法是利用PCA算法進行人臉的識別。本文主要研究基于PCA算法的人臉識別問題,PCA算法是一種得到廣泛應用的事實上的標準人臉識別方法。傳統(tǒng)主成分分析方法的基本原理是:利用K-L變換抽取人臉的主要成分,構成特征臉空間,識別時將測試圖像投影到此空間,得到一組投影系數,通過與各個人臉圖像比較進行識別。這種方法使得

28、壓縮前后的均方誤差最小,且變換后的低維空間有很好的分辨能力。下面將主要介紹基于改進型BP神經網絡上實現(xiàn)的主成分分析法在人臉識別中的應用。</p><p><b>  2. 主成分分析法</b></p><p>  2.1主成分分析法概述</p><p>  在處理信息時,當兩個變量之間有一定相關關系時,可以解釋為這兩個變量反映此課題的信息有一定

29、的重疊,例如,高??蒲袪顩r評價中的立項課題數與項目經費、經費支出等之間會存在較高的相關性;學生綜合評價研究中的專業(yè)基礎課成績與專業(yè)課成績、獲獎學金次數等之間也會存在較高的相關性。而變量之間信息的高度重疊和高度相關會給統(tǒng)計方法的應用帶來許多障礙。</p><p>  為了解決這些問題,最簡單和最直接的解決方案是削減變量的個數,但這必然又會導致信息丟失和信息不完整等問題的產生。為此,人們希望探索一種更為有效的解決方法

30、,它既能大大減少參與數據建模的變量個數,同時也不會造成信息的大量丟失。主成分分析正式這樣一種能夠有效降低變量維數,并已得到廣泛應用的分析方法。</p><p>  主成分分析以最少的信息丟失為前提,將眾多的原有變量綜合成較少幾個綜合指標,通常綜合指標(主成分)有以下幾個特點[5]:</p><p>  1.主成分個數遠遠少于原有變量的個數</p><p>  原有變

31、量綜合成少數幾個因子之后,因子將可以替代原有變量參與數據建模,這將大大減少分析過程中的計算工作量。</p><p>  2.主成分能夠反映原有變量的絕大部分信息</p><p>  因子并不是原有變量的簡單取舍,而是原有變量重組后的結果,因此不會造成原有變量信息的大量丟失,并能夠代表原有變量的絕大部分信息。</p><p>  3.主成分之間應該互不相關</p

32、><p>  通過主成分分析得出的新的綜合指標(主成分)之間互不相關,因子參與數據建模能夠有效地解決變量信息重疊、多重共線性等給分析應用帶來的諸多問題。</p><p>  4.主成分具有命名解釋性</p><p>  總之,主成分分析法是研究如何以最少的信息丟失將眾多原有變量濃縮成少數幾個因子,如何使因子具有一定的命名解釋性的多元統(tǒng)計分析方法。</p>

33、<p><b>  2.2 K-L變換</b></p><p>  PCA方法是由Turk和Pentlad提出來的,它的基礎就是Karhunen-Loeve變換(簡稱K-L變換),是一種常用的正交變換。首先對K-L變換作一個簡單介紹:</p><p>  假設X為n維的隨機變量,X可以用n個基向量的加權和來表示:</p><p>&l

34、t;b>  (1)</b></p><p>  式中:αi是加權系數,φi是基向量,此式可以用矩陣的形式表示:</p><p>  X =( ,, ,……,)( ,,…… )= (2)</p><p><b>  系數向量為:</b></p><p><

35、;b>  (3)</b></p><p>  綜上所述,K-L展開式的系數可用下列步驟求出:</p><p>  步驟一,求隨機向量X的自相關矩陣R=E[XTX],由于沒有類別信息的樣本集的μ均值向量,常常沒有意義,所以也可以把數據的協(xié)方差矩陣作為K-L坐標系的產生矩陣,這里μ是總體均值向量。步驟二,求出自相關矩陣或協(xié)方差矩陣R的本征值和本征向量( ,, ,……,)。步驟

36、三,展開式系數即為。</p><p>  K-L變換的實質是建立一個新的坐標系,將一個物體主軸沿特征矢量對齊的轉變換,這個變換解除了原有數據向量的各個分量之間相關性,從而有可能去掉那些帶有較少信息的坐標系以達到降低特征空間維數的目的[6]。</p><p>  2.3 主成分分析法及其基本思想與任務</p><p>  主成分分析(Principal Compone

37、nt Analysis, 簡稱PCA)是一種常用的基于變量協(xié)方差矩陣對信息進行處理、壓縮和抽提的有效方法,其基本思想是設法將原來眾多的具有一定相關性的指標X1,X2,…,XP(比如p個指標),重新組合成一組較少個數的互不相關的綜合指標Fm來代替原來指標。那么綜合指標應該如何去提取,使其既能最大程度的反映原變量Xp所代表的信息,又能保證新指標之間保持相互無關(信息不重疊)。</p><p>  設表示原變量的第一個

38、線性組合所形成的主成分指標,即,由數學知識可知,每一個主成分所提取的信息量可用其方差來度量,其方差Var(F1)越大,表示包含的信息越多。常常希望第一主成分所含的信息量最大,因此在所有的線性組合中選取的應該是X1,X2,…,XP的所有線性組合中方差最大的,故稱為第一主成分。如果第一主成分不足以代表原來p個指標的信息,再考慮選取第二個主成分指標,為有效地反映原信息,已有的信息就不需要再出現(xiàn)在中,即與要保持獨立、不相關,用數學語言表達就是其

39、協(xié)方差Cov(,)=0,所以是與不相關的X1,X2,…,XP的所有線性組合中方差最大的,故稱為第二主成分,依此類推構造出的F1,F2,……,Fm為原變量指標X1,X2,…,XP第一,第二,……,第m個主成分。</p><p><b> ?。?) </b></p><p><b>  根據以上分析得知:</b></p><p&g

40、t;  (1) 與互不相關,即Cov(,) = 0,并有Var()=,其中為X的協(xié)方差陣</p><p>  (2)是X1,X2,…,XP的一切線性組合(系數滿足上述要求)中方差最大的,……,即是與F1,F2,……,Fm -1都不相關的X1,X2,…,XP的所有線性組合中方差最大者。F1,F2,……,Fm(m≤p)為構造的新變量指標,即原變量指標的第一、第二、……、第m個主成分。</p><p

41、>  由以上分析可見,主成分分析法的主要任務有兩點:</p><p> ?。?)確定各主成分(i=1,2,…,m)關于原變量(j=1,2 ,…, p)的表達式,即系數( i=1,2,…,m; j=1,2 ,…,p)。從數學上可以證明,原變量協(xié)方差矩陣的特征根是主成分的方差,所以前m個較大特征根就代表前m個較大的主成分方差值;原變量協(xié)方差矩陣前m個較大的特征值(這樣選取才能保證主成分的方差依次最大)所對應的特

42、征向量就是相應主成分表達式的系數,為了加以限制,系數啟用的是對應的單位化的特征向量,即有= 1。</p><p> ?。?)計算主成分載荷,主成分載荷是反映主成分與原變量之間的相互關聯(lián)程度: </p><p><b> ?。?)</b></p><p>  采用這種方法可以克服單一的財務指標不能真實反映公司的財務情況的缺點,引進多方面的財務指標

43、,但又將復雜因素歸結為幾個主成分,使得復雜問題得以簡化,同時得到更為科學、準確的財務信息。</p><p>  2.4 主成分分析法的原理、目的及主成分特點</p><p>  主成分分析法的原理:</p><p>  根據方差最大化原理,用一組新的、線性無關且相互正交的向量來表征原來數據矩陣的行(或列)。這組新向量(主成分)是原始數據向量的線性組合。通過對原始數據

44、的平移、尺度伸縮(減均值除方差)和坐標旋轉(特征分解),得到新的坐標系(特征向量)后,用原始數據在新坐標系下的投影(點積)來替代原始變量。</p><p>  主成分分析法的目的:</p><p>  壓縮變量個數,用較少的變量去解釋原始數據中的大部分變量,剔除冗余信息。即將許多相關性很高的變量轉化成個數較少、能解釋大部分原始數據方差且彼此互相獨立的幾個新變量,也就是所謂的主成分。這樣就可

45、以消除原始變量間存在的共線性,克服由此造成的運算不穩(wěn)定、矩陣病態(tài)等問題。</p><p>  主成分分析法中其主成分有如下特點[7]:</p><p>  1.主成分是原變量的線性組合;</p><p>  2.各個主成分之間互不相關;</p><p>  3.主成分按照方差從大到小依次排列,第一主成分對應最大的方差(特征值);</p&

46、gt;<p>  4.每個主成分的均值為0、其方差為協(xié)方差陣對應的特征值;</p><p>  5.不同的主成分軸(載荷軸)之間相互正交。</p><p>  6.如果原來有p個變量,則最多可以選取p個主成分,這p個主成分的變化可以完全反映原來全部p個變量的變化;</p><p>  7.如果選取的主成分少于p個,則這些主成分的變化應盡可能多地反映原來

47、全部p個變量的變化。</p><p>  3.BP神經網絡及其在主成分分析法中的應用</p><p>  3.1 BP神經網絡及其模型與結構</p><p>  BP神經網絡,即反向傳播網絡,是將W-H學習規(guī)則一般化,對非線性可微分函數進行權值訓練的多層網絡。它是利用輸出后的誤差來估計輸出層的直接前導層的誤差,再用這個誤差估計更前一層的誤差,主要用于函數逼近、模式識

48、別、分類、數據壓縮。下面具體簡紹BP網絡的主要功能[8]:</p><p>  1.函數逼近:用輸入矢量和相應的輸出矢量訓練一個網絡逼近一個函數。</p><p>  2.模式識別:用一個特定的輸出矢量將它與輸入矢量聯(lián)系起來。</p><p>  3.分類:對輸入矢量以所定義的合適方式進行分類。</p><p>  4.數據壓縮:減少輸出矢量

49、維數以便于傳輸或存儲。</p><p>  BP神經網絡模型拓撲結構包括輸入層(input)、隱含層(hide layer)和輸出層(output layer)。圖1為具有r個輸入和一個隱含層的c。</p><p>  圖 1 神經網絡模型結構</p><p>  3.2 BP神經網絡的激活函數、學習規(guī)則及其語言實現(xiàn)</p><p>  

50、BP神經網絡的激活函數必須是處處可微的,故BP網絡經常使用的是S型的對數或正切激活函數和線性函數,如圖2所示。</p><p><b>  圖2 函數</b></p><p>  一般情況下,如需對輸出層限制在0與1之間,則采用S型激活函數,如采用線性函數做輸出層,則可輸出任何值。隱含層一般采用S型函數。</p><p>  BP學習規(guī)則由兩部

51、分組成:信息的正向傳遞與誤差的反向傳播。正向傳播時,傳播方向為輸入層→隱含層→輸出層,每層神經元的狀態(tài)只影響下一層神經元。若在輸出層得不到期望的輸出,則轉向誤差信號的反向傳播流程。通過這兩個過程的交替進行,在權向量空間執(zhí)行誤差函數梯度下降策略,動態(tài)迭代搜索一組權向量,使網絡誤差函數達到最小值,從而完成信息提取和記憶過程。其核心思想是:將輸出誤差以某種形式通過隱含層向輸入層逐層反轉[9]。</p><p>  設

52、BP網絡的輸入層有j個節(jié)點,隱含層有i個節(jié)點,輸出層有m個節(jié)點,輸入層與隱含層之間的權值為,隱含層與輸出層之間的權值為,如圖3所示。隱含層的傳遞函數為,輸出層的傳遞函數為</p><p><b>  圖3 傳遞網絡</b></p><p><b>  信息的正向傳遞:</b></p><p>  1.隱含層中第i個神經元的

53、輸出為:</p><p>  , i=1,2....s1 (6)</p><p>  2.輸出層第k個神經元的輸出為:</p><p>  , k=1,2...,s2 (7)</p><p>  對隱含層和輸出層的輸出設計使用C++語言實現(xiàn)如下:

54、</p><p>  void netout(int m,int n)</p><p><b>  {</b></p><p>  int i,j,k; //隱含層各節(jié)點的的輸出</p><p>  for (j=1,i=2;j<=m;j++) //m為隱含層節(jié)點個數&l

55、t;/p><p><b>  {</b></p><p>  netin[i][j]=0.0;</p><p>  for(k=1;k<=3;k++) //隱含層的每個節(jié)點均有三個輸入變量</p><p>  netin[i][j]=netin[i][j]+o[i-1][k]*w[i][k][j];</

56、p><p>  netin[i][j]=netin[i][j]-b[i][j];</p><p>  o[i][j]=A/(1+exp(-netin[i][j]/B));</p><p>  } //輸出層各節(jié)點的輸出</p><p>  for (j=1,i=3;j<=n;j++)</

57、p><p><b>  {</b></p><p>  netin[i][j]=0.0;</p><p>  for (k=1;k<=m;k++)</p><p>  netin[i][j]=netin[i][j]+o[i-1][k]*w[i][k][j];</p><p>  netin[i]

58、[j]=netin[i][j]-b[i][j];</p><p>  o[i][j]=A/(1+exp(-netin[i][j]/B));</p><p><b>  }</b></p><p><b>  }</b></p><p>  3.定義誤差函數為:</p><p>

59、;<b> ?。?)</b></p><p>  本設計使用C++語言實現(xiàn)如下:</p><p>  void calculd(int m,int n)</p><p><b>  {</b></p><p>  int i,j,k;</p><p><b>  d

60、ouble t;</b></p><p>  a=count-1;</p><p>  d[3][1]=(o[3][1]-sample[a][3])*(A/B)*exp(-netin[3][1]/B)/pow(1+exp(-netin[3][1]/B),2); //隱含層的誤差</p><p>  for (j=1,i=2;j<=m;

61、j++)</p><p><b>  {</b></p><p><b>  t=0.00;</b></p><p>  for (k=1;k<=n;k++)</p><p>  t=t+w[i+1][j][k]*d[i+1][k];</p><p>  d[i][j]

62、=t*(A/B)*exp(-netin[i][j]/B)/pow(1+exp(-netin[i][j]/B),2); //輸出層的誤差</p><p><b>  }</b></p><p><b>  }</b></p><p>  利用梯度下降法求權值變化及誤差的反向傳播:</p

63、><p>  1.輸出層的權值變化</p><p>  對從第i個輸入到第k個輸出的權值,有:</p><p>  = </p><p><b> ?。?)</b></p><p><b>  其中,</b></p><p>

64、<b>  同理可得:</b></p><p>  = </p><p><b>  (10) </b></p><p><b>  2.隱含層權值變化</b></p><p>  對從第j個輸入到第i個輸出的權值,有:</p><

65、;p><b>  =</b></p><p>  = (11)</p><p>  其中, </p><p><b>  同理可得:</b></p><p>  =

66、 (12)</p><p>  輸出層與隱含層權值變化的設計使用C++語言實現(xiàn)如下:</p><p>  void calculwc(int m,int n)</p><p><b>  {</b></p><p>  int i,j,k;</p><p>  //輸出層與隱含層之間的連接權值的

67、調整</p><p>  for (i=1,k=3;i<=m;i++)</p><p><b>  {</b></p><p>  for (j=1;j<=n;j++)</p><p><b>  {</b></p><p>  wc[k][i][j]=-COEF

68、*d[k][j]*o[k-1][i]+0.5*wc[k][i][j];</p><p><b>  }</b></p><p>  } //隱含層與輸入層之間的連接權值的調整</p><p>  for (i=1,k=2;i<=m;i++)</p><p><b>  {</b></p&

69、gt;<p>  for (j=1;j<=m;j++)</p><p><b>  {</b></p><p>  wc[k][i][j]=-COEF*d[k][j]*o[k-1][i]+0.5*wc[k][i][j];</p><p><b>  }</b></p><p>&

70、lt;b>  }</b></p><p><b>  }</b></p><p>  3.誤差反向傳播的圖形解釋:</p><p>  誤差反向傳播過程實際上是通過計算輸出層的誤差ek,然后將其與輸出層激活函數的一階導數相乘來求得。由于隱含層中沒有直接給出目標矢量,所以利用輸出層的進行誤差反向傳遞來求出隱含層權值的變化量。然后

71、計算,并同樣通過將與該層激活函數的一階導數相乘而求得,以此求出前層權值的變化量。如果前面還有隱含層,沿用上述同樣方法,一直將輸出誤差一層一層地反推到第一層為止,其圖形解釋如圖4所示。</p><p><b>  圖4 誤差反向傳播</b></p><p>  3.3 BP神經網絡的訓練及其設計過程</p><p>  為了訓練一個BP網絡,需要

72、計算網絡加權輸入矢量以及網絡輸出和誤差矢量,然后求得誤差平方和。當所訓練矢量的誤差平方和小于誤差目標時,訓練停止,否則在輸出層計算誤差變化,且采用反向傳播學習規(guī)則來調整權值,并重復此過程。當網絡完成訓練后,對網絡輸入一個不是訓練集合中的矢量,網絡將以泛化方式給出輸出結果。</p><p>  在程序設計之前,必須首先根據具體問題給出輸入矢量與目標矢量,并選定所要設計的神經網絡的結構,具體包括如下幾項:</p

73、><p><b>  1.網絡的層數</b></p><p>  理論證明,具有偏差和至少一個S型隱含層加上一個線性輸出層的網絡,能夠逼近任何有理函數。增加層數能降低誤差,但同時也增加了訓練的時間,所以一般優(yōu)先考慮增加隱含層中的神經元數。</p><p><b>  2.每層的神經元數</b></p><p

74、>  使用神經網絡的目的是實現(xiàn)攝像機輸出RGB顏色空間與CIE-XYZ色空間轉換,因此BP網絡的輸入層和輸出層的節(jié)點個數分別為3。下面主要介紹隱含層節(jié)點數量的確定。</p><p>  對于多層前饋網絡來說,隱含層節(jié)點數的確定是成敗的關鍵,如果數量太少,那么網絡所能獲取的用以解決問題的信息太少,如果數量太多,不僅增加訓練時間,更重要的是隱含層節(jié)點過多還可能出現(xiàn)所謂“過渡吻合”(Over fitting)問題

75、,即測試誤差增大導致泛化能力下降,因此合理選擇隱含層節(jié)點數非常重要。關于隱含層數及其節(jié)點數的選擇比較復雜,一般原則是:在能正確反映輸入輸出關系的基礎上,應選用較少的隱含層節(jié)點數,以使網絡結構盡量簡單。本論文中采用網絡結構增長型方法,即先設置較少的節(jié)點數,對網絡進行訓練,并測試學習誤差,然后逐漸增加節(jié)點數,直到學習誤差不再有明顯減少為止。</p><p><b>  3.每層的激活函數</b>

76、</p><p>  BP網絡的傳遞函數有多種。Log-sigmoid型函數的輸入值可取任意值,輸出值在0和1之間;tan-sigmoid型傳遞函數tansig的輸入值可取任意值,輸出值在-1到+1之間;線性傳遞函數purelin的輸入與輸出值可取任意值。BP網絡通常有一個或多個隱層,該層中的神經元均采用sigmoid型傳遞函數,輸出層的神經元則采用線性傳遞函數,整個網絡的輸出可以取任意值。只改變傳遞函數而其余參

77、數均固定,則一般傳遞函數使用tansig函數時要比logsig函數的誤差小,于是在以后的訓練中隱含層傳遞函數改用tansig函數,輸出層傳遞函數仍選用purelin函數。</p><p>  初始權值的選取 由于系統(tǒng)是非線性的,初始值對于學習是否達到局部最小、是否能夠收斂以及訓練時間的長短關系很大,一般取(-1 ,1)之間的隨機數。</p><p>  學習速率 學習速率決定每一次

78、循環(huán)訓練中所產生的權值變化量。一般取值范圍為0.01—0.8。</p><p>  期望誤差的選取 在設計網絡的過程中,期望誤差值也應當通過對比訓練后確定一個適合的值,適合是相對于所需要的隱含層的節(jié)點數來確定的。</p><p>  3.4 BP神經網絡的限制及其改進方法</p><p>  BP神經網絡有如下限制:</p><p>  

79、1.需要較長的訓練時間</p><p>  2.完全不能訓練(麻痹現(xiàn)象)</p><p>  3.局部最小值的產生導致訓練無法逃出這一局部極小值</p><p>  BP神經網絡的改進方法[10]:</p><p>  BP算法理論具有依據可靠、推導過程嚴謹、精度較高、通用性較好等優(yōu)點,但標準BP算法存在以下缺點:收斂速度緩慢;容易陷入局部極

80、小值;難以確定隱層數和隱層節(jié)點個數。在實際應用中,BP算法很難勝任,因此出現(xiàn)了很多改進算法。</p><p>  1.利用動量法改進BP算法</p><p>  標準BP算法實質上是一種簡單的最速下降靜態(tài)尋優(yōu)方法,在修正W(K)時,只按照第K步的負梯度方向進行修正,而沒有考慮到以前積累的經驗,即以前時刻的梯度方向,從而常常使學習過程發(fā)生振蕩,收斂緩慢。動量法權值調整算法的具體做法是:將上一

81、次權值調整量的一部分迭加到按本次誤差計算所得的權值調整量上,作為本次的實際權值調整量,即:</p><p><b>  (13)</b></p><p>  其中:α為動量系數,通常0<α<0.9;η—學習率,范圍在0.001~10之間。這種方法所加的動量因子實際上相當于阻尼項,它減小了學習過程中的振蕩趨勢,從而改善了收斂性。動量法降低了網絡對于誤差曲面局部細節(jié)的敏感

82、性,有效的抑制了網絡陷入局部極小。</p><p>  2.自適應調整學習速率</p><p>  標準BP算法收斂速度緩慢的一個重要原因是學習率選擇不當,學習率選得太小,收斂太慢;學習率選得太大,則有可能修正過頭,導致振蕩甚至發(fā)散。其調整的基本指導思想是:在學習收斂的情況下,增大,以縮短學習時間;當偏大致使不能收斂時,要及時減小,直到收斂為止。</p><p> 

83、 3.動量-自適應學習速率調整算法</p><p>  采用動量法時,BP算法可以找到更優(yōu)的解;采用自適應學習速率法時,BP算法可以縮短訓練時間。將以上兩種方法結合起來,就得到動量-自適應學習速率調整算法。</p><p><b>  4.L-M學習規(guī)則</b></p><p>  L-M(Levenberg-Marquardt)算法比前述幾種

84、使用梯度下降法的BP算法要快得多,但對于復雜問題,這種方法需要相當大的存儲空間。L-M(Levenberg-Marquardt)優(yōu)化方法的權值調整率選為:</p><p><b>  (14)</b></p><p>  其中:—誤差向量;—網絡誤差對權值導數的雅可比(Jacobian)矩陣;—標量,當很大時上式接近于梯度法,當很小時上式變成了Gauss-Newton

85、法,在這種方法中,也是自適應調整的。綜合考慮,擬采用L-M學習規(guī)則和動量法分別作為神經網絡的訓練函數和學習函數。</p><p>  改進的設計用C++語言實現(xiàn)如下:</p><p>  double r=0.1;//r為動量系數</p><p>  double **dw1;</p><p>  dw1=new double *[I

86、];//設置行</p><p>  for(j=0;j<I;j++)</p><p>  dw1[j]=new double [J];//設置列</p><p>  double *db1=new double [J];</p><p>  double **dw2;</p><p>  dw2=new d

87、ouble *[J];//設置行</p><p>  for(k=0;k<J;k++)</p><p>  dw2[k]=new double [K];//設置列</p><p>  double *db2=new double [K];</p><p>  //產生0-1均勻分布的隨機數</p><p>

88、  srand( (unsigned)time( NULL ) );</p><p>  for(j=0;j<J;j++) </p><p><b>  {</b></p><p>  for(i=0;i<I;i++)</p><p>  w1[i][j]=(double)((rand()/32767.0)*

89、2-1);</p><p><b>  }</b></p><p>  for(j=0;j<J;j++)</p><p>  b1[j]=(double)((rand()/32767.0)*2-1);</p><p>  for(j=0;j<J;j++)</p><p><b&g

90、t;  {</b></p><p>  for(k=0;k<K;k++)</p><p>  w2[j][k]=(double)((rand()/32767.0)*2-1);</p><p><b>  }</b></p><p>  for(k=0;k<K;k++)</p><

91、;p>  b2[k]=(double)((rand()/32767.0)*2-1);</p><p>  ifstream fin("data.dat");</p><p>  for(j=0;j<M;j++){</p><p>  for(i=0;i<I;i++)</p><p>  fin>&g

92、t;a0[j][i];</p><p>  for(k=0;k<K;k++)</p><p>  fin>>t[j][k];</p><p><b>  }</b></p><p>  fin.close();</p><p>  ofstream out1("erro

93、r.txt",ios::out);</p><p>  while(e1>0.01) </p><p><b>  {</b></p><p><b>  if(n>=N)</b></p><p>  goto label;</p><p><b&

94、gt;  int m=0;</b></p><p>  e1=0;//e1清零</p><p>  for(m=0;m<M;m++)</p><p><b>  { </b></p><p>  for(j=0;j<J;j++)//add1清零</p><p> 

95、 add1[j]=0;</p><p>  for(k=0;k<K;k++)//add2清零</p><p>  add2[k]=0;</p><p>  for(j=0;j<J;j++)//s1清零</p><p><b>  s1[j]=0;</b></p><p>  for

96、(j=0;j<J;j++)</p><p><b>  {</b></p><p>  for(i=0;i<I;i++)</p><p>  add1[j]+=w1[i][j]*a0[m][i];</p><p><b>  }</b></p><p>  for

97、(j=0;j<J;j++)</p><p><b>  {</b></p><p>  a1[j]=1.0/(1.0+exp(-add1[j]-b1[j]));// logsig計算隱層輸出結果</p><p><b>  }</b></p><p>  for(k=0;k<K;k++

98、)</p><p><b>  {</b></p><p>  for(j=0;j<J;j++)</p><p>  add2[k]+=w2[j][k]*a1[j];</p><p><b>  }</b></p><p>  for(k=0;k<K;k++)&l

99、t;/p><p>  a2[k]=add2[k]+b2[k];// purelin計算輸出層輸出結果</p><p>  for(k=0;k<K;k++)</p><p><b>  {</b></p><p>  e[k]=t[m][k]-a2[k];</p><p>  e1+=e[k]*e

100、[k];//求輸出層的平方誤差</p><p><b>  }</b></p><p>  for(k=0;k<K;k++)</p><p>  s2[k]=-2*e[k];//4</p><p>  for(j=0;j<J;j++)</p><p><b>  {</

101、b></p><p>  for(k=0;k<K;k++)</p><p>  temp[j][k]=(1-a1[j])*a1[j]*w2[j][k];</p><p><b>  }</b></p><p>  for(j=0;j<J;j++)</p><p><b>

102、;  {</b></p><p>  for(k=0;k<K;k++)</p><p>  s1[j]+=temp[j][k]*s2[k];//5</p><p><b>  }</b></p><p>  3.5主成分分析法的計算步驟及其語言實現(xiàn)</p><p>  主成分分

103、析的具體步驟如下: </p><p> ?。?)計算協(xié)方差矩陣</p><p>  計算樣品數據的協(xié)方差矩陣:,其中</p><p>  i,j=1,2,…,p (15)</p><p>  本計算設計使用C++語言實現(xiàn)如下[11]:</p><p>  for (j1 = 1

104、; j1 <= m; j1++)</p><p><b>  {</b></p><p>  for (j2 = j1; j2 <= m; j2++)</p><p><b>  {</b></p><p>  symmat[j1][j2] = 0.0;</p><p

105、>  for (i = 1; i <= n; i++)</p><p><b>  {</b></p><p>  symmat[j1][j2] += data[i][j1] * data[i][j2];</p><p><b>  }</b></p><p>  symmat[j2][

106、j1] = symmat[j1][j2];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return;</b></p><p>  (2)求出的特征值及相應的正交化單位特征向量</p><p&g

107、t;  的前m個較大的特征值12…m>0,就是前m個主成分對應的方差,對應的單位特征向量就是主成分的關于原變量的系數,則原變量的第i個主成分為:</p><p><b>  (16)</b></p><p>  主成分的方差(信息)貢獻率用來反映信息量的大小,為:</p><p><b>  (17)</b><

108、/p><p>  本設計使用C++語言實現(xiàn)如下:</p><p>  相關系數矩陣的特征值:</p><p>  mean = vector(m);</p><p>  stddev = vector(m);</p><p>  for (j = 1; j <= m; j++) \\確定列向量</p>

109、<p><b>  {</b></p><p>  mean[j] = 0.0;</p><p>  for (i = 1; i <= n; i++)</p><p><b>  {</b></p><p>  mean[j] += data[i][j];</p>&l

110、t;p><b>  }</b></p><p>  mean[j] /= (float)n;</p><p><b>  }</b></p><p>  printf("\nMeans of column vectors:\n");</p><p>  for (j = 1

111、; j <= m; j++) {</p><p>  printf("%7.1f",mean[j]); } printf("\n");</p><p>  for (j = 1; j <= m; j++) \\確定列向量偏差</p><p><b>  {</b></p>

112、<p>  stddev[j] = 0.0;</p><p>  for (i = 1; i <= n; i++)</p><p><b>  {</b></p><p>  stddev[j] += ( ( data[i][j] - mean[j] ) *</p><p>  ( data[i]

113、[j] - mean[j] ) );</p><p><b>  }</b></p><p>  stddev[j] /= (float)n;</p><p>  stddev[j] = sqrt(stddev[j]);</p><p><b>  }</b></p><p&g

114、t;  printf("\nStandard deviations of columns:\n");</p><p>  for (j = 1; j <= m; j++) { printf("%7.1f", stddev[j]); }</p><p>  printf("\n");</p><p> 

115、 for (i = 1; i <= n; i++)</p><p><b>  {</b></p><p>  for (j = 1; j <= m; j++)</p><p><b>  {</b></p><p>  data[i][j] -= mean[j];</p>

116、<p>  x = sqrt((float)n);</p><p>  x *= stddev[j];</p><p>  data[i][j] /= x;</p><p><b>  }</b></p><p><b>  }</b></p><p>  協(xié)方差

117、矩陣的特征值:</p><p>  mean = vector(m);</p><p>  for (j = 1; j <= m; j++) \\確定列向量</p><p><b>  {</b></p><p>  mean[j] = 0.0;</p><p>  for (i = 1;

118、i <= n; i++)</p><p><b>  {</b></p><p>  mean[j] += data[i][j];</p><p><b>  }</b></p><p>  mean[j] /= (float)n;</p><p><b> 

119、 }</b></p><p>  printf("\nMeans of column vectors:\n");</p><p>  for (j = 1; j <= m; j++) {</p><p>  printf("%7.1f",mean[j]); } printf("\n"

120、;);</p><p>  for (i = 1; i <= n; i++)</p><p><b>  {</b></p><p>  for (j = 1; j <= m; j++)</p><p><b>  {</b></p><p>  data[i][

121、j] -= mean[j];</p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?。?)選擇主成分</b></p><p>  最終要選擇幾個主成分,即F1,F2,……,Fm中m的確定是通過方差(信息)累計貢獻率G(m)來

122、確定</p><p><b>  (18)</b></p><p>  當累積貢獻率大于85%時,就認為能足夠反映原來變量的信息了,對應的m就是抽取的前m個主成分。</p><p>  (4)計算主成分載荷</p><p>  主成分載荷是反映主成分與原變量之間的相互關聯(lián)程度,原來變量(j=1,2 ,…, p)在諸主成分

123、(i=1,2,…,m)上的荷載 ( i=1,2,…,m; j=1,2 ,…,p)。:</p><p><b>  (19)</b></p><p>  本設計用C++程序實現(xiàn)如下:</p><p>  void tqli(d, e, n, z)</p><p>  float d[], e[], **z;</p&g

124、t;<p><b>  int n;</b></p><p><b>  {</b></p><p>  int m, l, iter, i, k;</p><p>  float s, r, p, g, f, dd, c, b;</p><p>  void erhand();<

125、;/p><p>  for (i = 2; i <= n; i++)</p><p>  e[i-1] = e[i];</p><p>  e[n] = 0.0;</p><p>  for (l = 1; l <= n; l++)</p><p><b>  {</b></p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論