使用神經網路識別手寫數字

2021-07-30 11:42:37 字數 1804 閱讀 2081

神經網路和深度學習為影象識別、語音識別、自然語言處理等問題提供了目前最好的解決方案。本書主要會介紹神經網路和深度學習背後關鍵的概念。

更多關於本書的細節,請參考這裡。或者您可以直接從第一章開始學習。

本專案是neural networks and deep learning的中文翻譯,原文作者 michael nielsen

人類的視覺系統是世上的乙個奇蹟。考慮以下這串手寫的數字:

大部分人都能輕易地識別出圖上的數字是504192。這個看似簡單的過程的背後,實際上很複雜。在我們大腦的每個腦半球中,有乙個叫做初級視皮層(primary visual cortex)的部分,也被稱作v1。它擁有1億4千萬個神經元,包含了上百億的神經元連線。然而,人類的視覺系統不僅僅依賴於v1,還依賴於整套視皮層——v2、v3、v4和v5的協同工作,來實現複雜的影象處理任務。我們的大腦就像一台超級計算機,經過了上億年的進化,才得以能夠出色地理解視覺的世界。識別手寫數字不是乙個簡單的任務,但是,人類極其擅長理解眼睛所看到的東西,並且幾乎所有這些工作都是在無意識的情況下完成的,所以我們通常不會意識到我們的視覺系統解決了的任務有多麼困難。

當你企圖實現乙個用來識別類似上圖數字的電腦程式時,你就會逐漸意識到視覺模式識別的難度。乙個本來對於人類看似很簡單的事情,突然就變得極其困難。「數字9的上部有乙個圓圈,右下部有一筆豎線」這種人類識別形狀的直覺,在演算法上卻很難表示。當你試圖定義明確的識別規則時,你會很快地被一大堆特例所困擾。這似乎毫無解決的希望。

神經網路(neural networks)使用一種不同的思路解決這個問題。它的思想是利用大量的手寫數字,亦被稱為訓練樣例,

從這些訓練樣例學習並建立乙個系統。換一種說法,神經網路使用這些樣例,從中能夠自動地學習到識別手寫數字的規則。而且,隨著訓練樣例的增加,神經網路可以從中學習到更多資訊,從而提高它的準確度。所以,儘管我上面只給出了100個訓練數字,也許我們可以使用上千、上萬、上億的訓練樣例來構建乙個更好的手寫識別器。

在本章中,我們會實現乙個神經網路的電腦程式,來學習並識別手寫數字。雖然這個程式僅僅只有74行,並且沒有使用任何特別的神經網路庫,但是它可以在沒有任何人工干預的情況下,達到超過百分之96的手寫數字識別準確率。在之後的章節中,我們會進一步改善我們的方法,使之達到超過百分之99的準確率。實際上,目前最好的商用神經網路已經足夠好到能被銀行用來處理支票,以及被郵局用來識別位址。

我們會專注於手寫數字的識別這個問題,因為它基本上是學習神經網路最好的示範問題,之所以這麼說是因為它戳中了幾個痛點:它具有挑戰性,識別手寫數字不是乙個簡單的工程;同時它的難度也不是特別大,並不需要極其複雜的方法,或者大量的計算資源。而且它是實現更高階技術的基礎,例如深度學習(deep learning)。所以,手寫數字識別問題會貫穿本書。在本書的後部分,我們會討論如何將這些想法應用到計算視覺的其它問題上,甚至語音處理、自然語言處理以及其它領域。

當然,本章的主旨如果只是實現乙個程式來識別手寫數字,那麼本章的內容就會少很多!實際上,在這個過程中,我們會產生許多關於神經網路的關鍵思想,包括兩種重要的人工神經元(感知機和sigmoid神經元),以及神經網路的標準學習演算法,稱為隨機梯度下降(stochastic gradient descent)。在本書中,我關注於解釋為什麼問題能夠被這樣解決,以及為你建立關於神經網路的直覺。儘管相比於僅僅展示基礎理論過程,這需要更長的篇幅來討論,但是這對於你的深入理解是很有價值的。從中的收穫,就是在章節的最後,我們就能夠理解深度學習是什麼,以及為什麼它能夠起作用。

**中:

使用神經網路識別手寫數字

最近在看michael nielsen的 neural network and deep learning 嘗試復現書中的 但這本書的 貌似用的python2.0,所以在執行的時候,報了好多錯誤,在這裡進行記錄一下。1 載入mnist資料集出錯 unicodedecodeerror ascii co...

神經網路實現手寫數字識別

簡單實現3層神經網路識別手寫數字 import numpy import matplotlib.pyplot as plt import scipy.special class network 定義神經網路類 definit self,inputnodes,hiddennodes,outputnod...

12 使用卷積神經網路識別手寫數字

看 1 import tensorflow as tf 2from tensorflow.examples.tutorials.mnist import input data34 5 mnist input data.read data sets mnist data one hot true 67...