OpenCV計算機視覺技術(Python語言描述)(微課版)課件 第十一章-神經(jīng)網(wǎng)絡_第1頁
OpenCV計算機視覺技術(Python語言描述)(微課版)課件 第十一章-神經(jīng)網(wǎng)絡_第2頁
OpenCV計算機視覺技術(Python語言描述)(微課版)課件 第十一章-神經(jīng)網(wǎng)絡_第3頁
OpenCV計算機視覺技術(Python語言描述)(微課版)課件 第十一章-神經(jīng)網(wǎng)絡_第4頁
OpenCV計算機視覺技術(Python語言描述)(微課版)課件 第十一章-神經(jīng)網(wǎng)絡_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

神經(jīng)網(wǎng)絡Section人工神經(jīng)網(wǎng)絡OpenCVANNMNIST手寫數(shù)字識別人工神經(jīng)網(wǎng)絡基于數(shù)據(jù)的機器學習是現(xiàn)代智能技術的重要方面,研究從觀測數(shù)據(jù)出發(fā)尋找規(guī)律,利用這些規(guī)律對未來數(shù)據(jù)或無法觀測的數(shù)據(jù)進行預測。而在第八章節(jié)中我們就對SVM有了基本的了解,學會了如何對數(shù)據(jù)集進行訓練與預測,在本章節(jié)中我們將進行學習OpenCV中的機器學習概念。本章節(jié)中我們將對人工神經(jīng)網(wǎng)絡(ANN)的概念進行學習,并采用OpenCV中的人工神經(jīng)網(wǎng)絡進行對數(shù)據(jù)的訓練與預測。人工神經(jīng)網(wǎng)絡(ANN,ArtificialNeuralNetwork)是一種由大量的神經(jīng)元互相連接所組成的復雜網(wǎng)絡結(jié)構(gòu),它是一種模擬生物神經(jīng)網(wǎng)絡、或是動物的大腦組織結(jié)構(gòu)或者功能的模擬。神經(jīng)元模型是一個包含輸入,輸出與計算功能的模型。如圖11-1中,是一個典型的神經(jīng)元模型。如下圖,該圖為可視化的神經(jīng)網(wǎng)絡結(jié)構(gòu),如圖中的節(jié)點為神經(jīng)元,連接線為神經(jīng)元之間的連接,每條連接線對應一個不同的權重。為了區(qū)分各個神經(jīng)層,一個經(jīng)典的神經(jīng)網(wǎng)絡包含三個層次,分別為輸入層(InputLayer)、隱藏層(HiddenLayer)、輸出層(OutputLayer)。(1) 輸入層:輸入層表示神經(jīng)網(wǎng)絡的輸入數(shù)目。如該網(wǎng)絡需要進行判斷是否為人,則該屬性會有人的五官、四肢、體重、身高等,如果有5個屬性則需要5個輸入節(jié)點。(2) 隱藏層:隱藏層負責輸入層的加工處理。類似于人的感知神經(jīng),需要經(jīng)過人的神經(jīng)傳遞加工才能衍生出對感知的理解。隱藏層可以擁有多層,但是大多數(shù)情況只需要一層,要確定隱藏層的神經(jīng)元數(shù),則需要使用不同的設置方法進行測試,以選擇最優(yōu)的數(shù)目。隱藏神經(jīng)元數(shù)目的選擇原則:神經(jīng)元數(shù)目應該介于輸入層的大小與輸出層的大小之間。如果輸入層與輸出層兩者之間大小差距很大,則神經(jīng)元數(shù)目應該選擇與輸出層大小更接近。如果輸入層的大小相對較小,則神經(jīng)元數(shù)目最好是輸入層和輸出層大小之和的三分之二,或者小于輸入層大小的兩倍。(3) 輸出層:輸出層表示信息在神經(jīng)元中傳遞和中轉(zhuǎn)、分析、權衡形成輸出的結(jié)果,通過輸出的結(jié)果就可以直接看出計算機對事物的認知。在后續(xù)的訓練過程中,我們在訓練集上訓練出了最優(yōu)的訓練集,但是當我們將其使用在測試集中,會發(fā)現(xiàn)測試的誤差很大,這時候有可能會出現(xiàn)一種特別常見且重要的現(xiàn)象——過擬合現(xiàn)象(Overfitting)。如下圖中,則為分類問題中的過擬合現(xiàn)象,模型擬合程度過高,數(shù)據(jù)距離擬合曲線近。對于如何解決過擬合現(xiàn)象,常用的有以下四種辦法:1.添加更多的訓練數(shù)據(jù)當訓練數(shù)據(jù)更多時,泛化能力自然也越好,但該方法在很多情況下我們無法獲取更多的數(shù)據(jù),當沒有更多數(shù)據(jù)時采用其他方法。該方法為最優(yōu)解決方法。2.減小網(wǎng)格大小減小模型大小,即減少模型中可學習參數(shù)的個數(shù)。3.添加權重正則化強制讓模型權重只能取較小的值,從而限制模型的復雜度,這使得權重值的分布更加規(guī)則,簡單模型比復雜模型更不容易過擬合。4.添加dropout正則化在對某一層使用dropout,就是在訓練過程中隨機對該層的一些輸出特征舍棄。欠擬合(Underfitting)與過擬合的區(qū)別在于,在使用已經(jīng)訓練完成的模型中,進行訓練集的測試表現(xiàn)很差,并且在測試集的測試表現(xiàn)也很差,這種現(xiàn)象有可能就是欠擬合現(xiàn)象所導致的。如下圖中,則為分類問題中的欠擬合現(xiàn)象,模型擬合程度不高,數(shù)據(jù)距離擬合曲線較遠,或指模型沒有很好地捕捉到數(shù)據(jù)特征,不能夠很好地擬合數(shù)據(jù)。對于如何解決欠擬合現(xiàn)象,常用的有以下四種辦法:1.添加新的特征項有時候我們模型出現(xiàn)欠擬合的時候是因為特征項不夠?qū)е碌?,可以添加其他?/p>

征項來很好地解決。2.添加多項式特征例如將線性模型通過添加二次項或者三次項使得模型的泛化能力更強。3.減少正則化參數(shù)正則化的目的是用來防止過擬合的,但是現(xiàn)在模型出現(xiàn)了欠擬合,則需要減少

正則化參數(shù)。在人工神經(jīng)網(wǎng)絡的學習算法分類中,主要分成有監(jiān)督學習、無監(jiān)督學習、半監(jiān)督學習和強化學習四類。

1.監(jiān)督學習:在監(jiān)督學習中,訓練集樣本是由輸入對象特征和輸出結(jié)果標簽所組成,通過訓

練,讓機器可以自己找到特征和標簽之間的聯(lián)系,在面對只有特征沒有標簽的數(shù)據(jù)時,可以判斷出標簽。2.無監(jiān)督學習:與監(jiān)督學習相反,訓練集樣本只有輸入對象特征,機器要根據(jù)聚類或一定

的模型得到數(shù)據(jù)之間的關系。

3.半監(jiān)督學習:即是監(jiān)督學習和無監(jiān)督學習的結(jié)合,訓練集樣本的一部分特征是有標簽的,但大部分是缺少標簽的。在半監(jiān)督學習中,包含兩種學習方法,一種是將沒有標簽的數(shù)據(jù)和有標簽的數(shù)據(jù)同等對待進行訓練,另一種是將沒有標簽的數(shù)

據(jù)作為需要測試數(shù)據(jù)對待。

4.強化學習:在強化學習中,訓練集樣本只有輸入對象特征,在機器訓練過程中,決策機制決定決策行為,每一次的測試只給出一個評分,而這種分數(shù)導向性相當于監(jiān)督學習中的正確標簽,機器一次次在環(huán)境中嘗試,根據(jù)測試數(shù)據(jù)對應的分數(shù)標簽,學習選擇能夠帶來高分的行為。OpenCVANN在OpenCV中提供了人工神經(jīng)網(wǎng)絡的ml_ANN_MLP類。我們現(xiàn)在將從一個簡單的ANN例子進行對ANN的初步了解。程序首先使用ANN_MLP_create()函數(shù)創(chuàng)建ml_ANN_MLP實例,緊接著使用setLayerSizes()函數(shù)與setTrainMethod()函數(shù)設置ANN的網(wǎng)絡結(jié)構(gòu)與訓練算法,然后使用train()函數(shù)對訓練數(shù)據(jù)進行訓練,最后使用predict()函數(shù)對測試數(shù)據(jù)進行測試。通過觀察該程序代碼,ANN結(jié)構(gòu)分成6個節(jié)點的輸入層、4個節(jié)點的隱藏層與6個節(jié)點的輸出層,并采用BACKPROP反向傳播算法進行學習,該算法會根據(jù)分類誤差來改變權重。train()函數(shù)和predict()函數(shù)兩種函數(shù)與前面的SVM相同,都是繼承于ml.StatModel。觀察train()函數(shù)的輸出標簽,所指定的訓練輸入數(shù)組對應的是0到6類中的3類,這種形式的標簽稱為獨熱編碼(One-Hot)。通過程序的結(jié)果觀察,結(jié)果返回的是一個元組,元組中第一值表示類標簽,第二值表示每一值對應每一個類的概率。如預測結(jié)果中,3.0表示該測試輸入數(shù)據(jù)被神經(jīng)網(wǎng)絡分類為3類,后面數(shù)組中該測試輸入數(shù)據(jù)中最大概率值為0.91,索引在3中,表明輸入數(shù)據(jù)與3類的最接近。第一個返回的參數(shù),ml_ANN_MLP類的retval,表示創(chuàng)建ANN人工神經(jīng)網(wǎng)絡的實例。cv2.ml.ANN_MLP_create()->retval第一個參數(shù),numpy.ndarray類型的_layer_sizes,表示ANN人工神經(jīng)網(wǎng)絡的層次結(jié)構(gòu)與節(jié)點數(shù)目。cv2.ml.ANN_MLP_create().setLayerSizes(_layer_sizes)->None第一個參數(shù),int類型的method,表示ANN的訓練方法。訓練方法如“ANN訓練方法枚舉表”,默認為ANN_MLP_BACKPROP。cv2.ml.ANN_MLP_create().setTrainMethod(method,param1,param2)->None第二個參數(shù),float類型的param1,表示ANN_MLP_RPROP的setRpropDW0或ANN_MLP_BACKPROP的setBackpropWeightScale或ANN_MLP_ANNEAL的initialT。第三個參數(shù),float類型的param2,表示ANN_MLP_RPROP的setRpropDWMin或ANN_MLP_BACKPROP的setBackpropMomentumScale或ANN_MLP_ANNEAL的finalT。cv2.ml.ANN_MLP_create().setTrainMethod(method,param1,param2)->NoneMNIST手寫數(shù)字識別在該節(jié)中,我們將對基于OpenCV的人工神經(jīng)網(wǎng)絡的概念進行探討,完成一個有意義的程序,掌握人工神經(jīng)網(wǎng)絡的基本原理與結(jié)構(gòu),以及如何基于應用需求來設計神經(jīng)網(wǎng)絡的拓撲結(jié)構(gòu)。當我們開始學習編程的時候,第一件事往往是學習打印"HelloWorld"。就好比編程入門有HelloWorld,而機器學習的入門就有MNIST。MNIST是一個入門級的計算機視覺數(shù)據(jù)集,它包含各種手寫數(shù)字圖像,如圖所示。MNIST不僅包含各種手寫數(shù)字,并且它包含每一個圖像對應的結(jié)果標簽,標簽即該圖像的數(shù)字結(jié)果。我們可以在YannLecun的站點中對MNIST進行下載:MNIST數(shù)據(jù)集的文件列表如下:MNIST數(shù)據(jù)集被分成兩個部分,前綴名為train的是訓練集,前綴名為t10k的是測試集,后綴images和labels對應圖像與標簽文件。訓練集中包含60000行的訓練數(shù)據(jù),測試集中包含10000行的測試數(shù)據(jù),并且每一幅圖像數(shù)據(jù)包含28×28=784的像素點。對MNIST數(shù)據(jù)集進行了解后,我們編寫一個模塊從mnist數(shù)據(jù)集進行提取數(shù)據(jù)。該模塊包含兩個函數(shù),load_mnist()函數(shù)用于加載本地路徑中的MNIST數(shù)據(jù)集,wrap_data()函數(shù)用于返回訓練集與測試集中的數(shù)據(jù)。觀察下圖所示輸出結(jié)果,MNIST數(shù)據(jù)集中的圖像形狀為(784,1),非常適合直接用于進行機器學習訓練,label為圖像的數(shù)字,在ANN進行訓練時則需要將label轉(zhuǎn)為獨熱編碼。在“MNIST手寫數(shù)字數(shù)據(jù)庫”一節(jié)中我們對MNIST數(shù)據(jù)集有了基本的了解,并掌握了如何讀取數(shù)據(jù)集進行使用?,F(xiàn)在我們采用MNIST進行ANN對手寫數(shù)字進行訓練,并對手寫數(shù)字進行識別。程序首先采用mnist_reader模塊中wrap_data()函數(shù)獲取mnist數(shù)據(jù)集中的訓練集和測試集,接著進初始化ANN實例,設置784節(jié)點的輸入層、64節(jié)點的隱藏層、10節(jié)點的輸出層,對應圖像784像素點與0~9數(shù)字分類。使用ANN實例進行對MNIST訓練集進行學習訓練,訓練完成后使用save()函數(shù)保存模型,save()函數(shù)繼承于ml.StatModel方便在測試時能采用ANN_MLP_load()函數(shù)讀取模型進行測試。最后對測試集數(shù)據(jù)進行測試,計算準確率并輸出。第一個參數(shù),int類型的type,表示激活函數(shù)的類型。類型如“ANN激活函數(shù)類型枚舉”。cv2.ml.ANN_MLP_create().setActivationFunction(type,param1,param2)->None第二個參數(shù),float類型的param1,表示激活函數(shù)的第一個參數(shù)α。默認值為0。第三個參數(shù),float類型的param2,表示激活函數(shù)的第二個參數(shù)β。默認值為0。cv2.ml.ANN_MLP_create().setActivationFunction(type,param1,param2)->None第一個參數(shù),tuple類型的val,表示算法的迭代終

溫馨提示

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

評論

0/150

提交評論