亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹

系統 2220 0

人體的視覺系統是一個相當神奇的存在,對于下面的一串手寫圖像,可以毫不費力的識別出他們是504192,輕松到讓人都忘記了其實這是一個復雜的工作。

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第1張圖片

實際上在我們的大腦的左腦和右腦的皮層都有一個第一視覺區域,叫做V1,里面有14億視覺神經元。而且,在我們識別上面的圖像的時候,工作的不止有V1,還有V2、V3、V4、V5,所以這么一看,我們確實威武。

但是讓計算機進行模式識別,就比較復雜了,主要困難在于我們如何給計算機描述一個數字9在圖像上應該是怎樣的,比如我們跟計算機說,9的上面是一個圈,下右邊是1豎。然而有的人寫9會帶勾,有的人還會在圈周圍多出點什么,總的來說,這種描述法太容易出現其他狀況。況且,我們這里討論的還只是數字,涉及到字母、漢字、符號就回更復雜。

于是人們就有了另外一種途徑,那就是我們不用告訴計算機什么是9,我們可以把他當作一個小孩子,讓他見很多9的圖片,對他說,這是9,記得哈。慢慢的他就形成了自己的評判標準,等他長大了,自然就知道以后遇到的圖片是不是9了。讓我們人學習的方式是見聞,讓計算機學習的就是給他數據,這個數據通常被叫做訓練樣本(如圖),而這套學習的方法,就是神經網絡了。

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第2張圖片

感知機(Perceptrons)

在說人工神經網絡之前,我們先說另外一個人工神經元系統,叫感知機(Perceptrons)。感知機模型是這樣的:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第3張圖片

其中x1,x2,x3是二進制的輸入值,output是二進制的輸出值。在每個輸入端,還會有一個權重,w1,w2,w3。output取決于x1*w1+x2*w2+x3*w3,如果他小于等于一個臨界值的時候,output就輸出0,大于等于那個臨界值的時候,output就輸出1。當然輸入值可以是任意多個,用公式表示就是:

output={01if ∑jwjxj≤ thresholdif ∑jwjxj> threshold

感知機模型就這么簡單,他是一個相當好的決策系統,用來解決是或者不是,去或者不去,熟悉我的朋友可能知道我從古代儒家修身的功過格受啟發,自己制定的一套決策系統,也是用因素*權重然后匯總,看得到的正面因素占優還是負面的因素占優,最后做決策,真是相當好用,只不過那時候還不知道感知機模型。

我們把Σwjxj用w?x表示,把臨界值提到等號右邊,用-b表示,那么上面的等式就如下所示:

b一般稱作偏差。

既然有一層的感知機模型,多層的就很好理解了,如圖:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第4張圖片

這個多層(從左到右)的感知機里面,第一層的感知機比較簡單,只根據輸入的值和權重就可以得出結果,第二層的結果就得根據第一層的結果和相應的的權重了,與復雜度相對應,他也就可以用來做更加復雜和抽象的決定,第三層就更復雜了。

這種上世紀五十年代就出來的神經元系統功能強大,但是對于機器學習有一個重大的缺陷。我們教小孩子的時候,小孩子進步一點點,我們就鼓勵他一下,小孩子退步一點點,我們就批評一下,他從我們的批評和鼓勵中自動的去調整自己的認知,慢慢的成長。但是這個感知機就不同了,他的輸入值只有0和1,他的成長沒有一點點的說法,所以壓根就不知道怎么調整,可能內部參數調整的亂七八糟,輸出的結果還是不變的。要實現學習和進步,就得有這么一點點一點點進步的概念,也就是說,w或者b變了一點點,那么輸出值就得變一點點,總的來說,就是要實現下圖所示的效果:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第5張圖片

于是新一代的神經元系統就出世了,他叫S曲線神經元系統(Sigmoid neurons)。

S曲線神經元系統(Sigmoid neurons)

簡單來說,S曲線神經元系統和感知機系統的區別在于我們的輸入值x1,x2,x3和輸出值output都不是0和1了,改為從0到1之間的任何實數。而且規定,對我輸出值output,由于是與w?x和b相關的,我們可以用σ(w?x,b)表示,他滿足函數:

把w?x和b帶進去,就是:

試著看下,如果當w?x + b→+∞的時候,e^-(w?x+b)→0,σ(w?x,b)→1。相反,當w?x + b→-∞的時候,σ(w?x,b)→0,所以,感知機系統也是一個特殊的S曲線神經元系統。

至于為什么σ(w?x,b)必須滿足上述的函數呢。請看σ(z)的圖形:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第6張圖片

他的定義域是(-∞,+∞),值域是(0,1),也就是說,不管w?x和b怎么折騰,總能保證輸出值在0到1之間。特別的,當我們對一個事情做決定時,比如我們讓計算機決定看到的一個圖形是不是9,0到1之間的一個數,可以在物理意義上對應他是9的概率。(我后來才意識道,這個說法是錯誤的)

我們說,我們拋棄感知器,采用S曲線神經元系統,是為了讓輸出結果的變動和我們采取權重w和偏離b的變動對應起來。那么對于方程output = σ(w?x,b),由于輸入值x是已知的常數,根據全微分的定義,有:

輸出值的變動和我們選用的參數變動就對應起來了。

構造我們的神經網絡

在我們構建神經網絡的過程中,一般也會把輸入的數據當作神經元,輸入的那層叫做輸入層,中間可能有多層,通常被叫做隱藏層,輸出的那一層就叫做輸出層。如圖:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第7張圖片

在設計神經網絡時,一般會采取簡單粗暴的方式,比如我們要讓計算機識別手寫稿的掃描件圖像,其中的一個字的圖像像素個數是64*64=4096個,那么我們設計神經網絡的時候,輸入層神經元個數就是4096個,其中每個神經元的輸入數據就是該像素的灰度值(參照文章的第一幅圖)歸一化成0到1之間的數值。而我們要識別出的結果,可能包括數字0-9加26個大大小寫字母再加六千常用漢字,那我們設計的輸出層神經元個數就用過是10+26*2+6000=6062個,其中每個神經元對應一個我們要識別的結果。

具體到本實例中,訓練樣本和識別測試數據是28*28像素的,輸出結果只有10個數字,那么輸入層就應該是786個神經元,輸出層是10個神經元。至于中間隱藏層的神經元,作者選了15個,說是經過了多次實驗,15個的效果比較好。就我的理解,應該是越多約好的(不一定正確),不過越多也意味著運算量越大,所以作者最后選了15個。最終設計的結果如圖:

Python與人工神經網絡:使用神經網絡識別手寫圖像介紹_第8張圖片

最后還有一個問題,如果是連續的書寫手稿,怎么把他分割成一個個的。作者說實際上這個問題可以在我們完成通過神經網絡進行識別之后再說,因為識別出來誰都不像的,就說明應該要分割了,那我們也就跟著作者的思路,暫時先不管。

總結

以上就是本文關于Python與人工神經網絡:使用神經網絡識別手寫圖像介紹的全部內容嗎,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:

神經網絡理論基礎及Python實現詳解

神經網絡python源碼分享

70行Java代碼實現深度神經網絡算法分享

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 综合亚洲欧美日韩一区二区 | 亚洲精品免费在线 | 九七97影院理论片手机在线观看 | 国产麻豆久久 | 玖玖成人| 亚洲欧美精品 | 久久精品在这里 | 欧美日韩中字 | 欧美视频在线观看一区二区 | 亚洲国产天堂久久九九九 | 99视频九九精品视频在线观看 | 亚洲一级黄色 | 欧美午夜艳片欧美精品 | 福利影院第一页 | 午夜亚洲| 国产精品久久久久久永久牛牛 | 亚洲性一区 | 四库国产精品成人 | bbw老妇bbwbbwass | 国产在线观看一区二区三区 | 亚洲精品久久久久久久网站 | 中国国产一国产一级毛片视频 | 亚洲国产一区二区三区四区 | 久热爱免费精品视频在线播放 | 欧美精品 日韩 | 欧美成人在线视频 | 国产这里只有精品 | 狠狠ri| 四虎影院在线网址 | 黄片毛片在线观看 | 日韩亚洲成a人片在线观看 日韩亚洲第一页 | 国产成人综合亚洲亚洲欧美 | 黑人巨大精品战中国美女 | 欧美成人亚洲国产精品 | 亚洲一区二区三区免费观看 | 欧美成人性色生活18黑人 | 四虎精品免费视频 | 亚洲综合国产一区在线 | 国产婷婷综合在线视频中 | 日韩一区二区三区在线观看 | 久久私人影院 |