手把手教你用一個簡單的2DCNN完成MNIST數字識別任務!
卷積神經網路(CNN)是當前用於影像分類任務的最先進的體系結構。無論是面部識別、自動駕駛汽車還是物體檢測,CNN都被廣泛使用。在這篇文章中,我們設計了一個簡單的二維卷積神經網路(CNN)模型,該模型使用具有張量流後端的keras,用於眾所周知的MNIST數字識別任務。整個工作流程可以是:
-
準備資料
-
建立和編譯模型
-
訓練和評估模型
-
將模型儲存到磁碟以供重用
準備資料
這裡使用的資料集是如上所述的MNIST資料集。 MNIST資料庫(修改後的國家標準與技術研究院資料庫)是手寫數字(0至9)的大型資料庫。該資料庫包含60,000個訓練影像和10,000個每個大小為28x28的測試影像。第一步是載入資料集,這可以通過keras api輕鬆完成。
從這裡可以看出,在左上角儲存的影像'5'是X_train [0],y_train [0]包含標籤’5'。我們的深度學習模式應該只能夠手寫影像並預測寫入的實際數字。
現在,為了準備資料,我們需要對影像進行一些處理,如調整影像大小,對畫素值進行歸一化等。
在對影像資訊進行必要的處理之後,標籤資料即y_train和y_test需要被轉換為分類格式,如標籤'3'應該被轉換為向量[ 0,0,0]用於建模。
建立和編譯模型
在資料準備好提供給模型後,我們需要定義模型的體系結構並使用必要的優化函式、損失函式和效能指標進行編譯。
這裡遵循的體系結構是2個卷積層,接著是合併層,分別是完全連線層和softmax層。在每個卷積層使用多個濾波器,用於不同型別的特徵提取。一個直觀的解釋是,如果第一個過濾器有助於檢測影像中的直線,第二個過濾器將有助於檢測圓圈等等。每層技術執行的解釋將成為即將釋出的文章的一部分。在maxpooling和完全連線層之後,在我們的模型中引入dropout作為正則化來減少過度擬合問題。
在maxpooling和完全連線層之後,在我們的模型中引入dropout作為正則化來減少過度擬合問題。
在定義了模型的體系結構之後,需要編譯模型。在這裡,我們使用categorical_crossentropy損失函式,因為它是一個多類分類問題。由於所有標籤都具有相似的權重,因此我們更願意將其作為效能指標。使用稱為AdaDelta的流行梯度下降技術來優化模型引數。
訓練和評估模型
在定義和編譯模型架構之後,需要使用訓練資料對模型進行訓練,以便能夠識別手寫數字。因此我們將用X_train和y_train來擬合模型。
這裡,一個時代意味著所有訓練樣本的前向和後向傳遞。批量大小意味著一次前進/後退過程中訓練樣本的數量。訓練輸出是:
現在,訓練好的模型需要根據效能進行評估。
測試準確性99%+意味著該模型對於預測訓練良好。如果我們將整個訓練日誌形象化,那麼隨著更多數量的時期,模型在訓練和測試資料上的損失和準確性趨於一致,從而使模型變得穩定。
將模型儲存到磁碟以供重用
現在,訓練好的模型需要序列化。模型的體系結構或結構將儲存在json檔案中,權重將以hdf5檔案格式儲存。
因此,儲存的模型可以稍後重複使用或輕鬆移植到其他環境。在即將釋出的文章中,我們將看到如何在生產環境中部署這種訓練好的模型。
享受深度學習!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31509949/viewspace-2155026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Pytorch和卷積神經網路進行簡單的數字識別(MNIST)PyTorch卷積神經網路
- Tensorflow2.0-mnist手寫數字識別示例
- Pytorch搭建MyNet實現MNIST手寫數字識別PyTorch
- 用tensorflow2實現mnist手寫數字識別
- 在PaddlePaddle上實現MNIST手寫體數字識別
- 一個簡單的人臉識別庫
- 手把手教你用redis實現一個簡單的mq訊息佇列(java)RedisMQ佇列Java
- 手把手教你用C語言寫一個簡單的quine(輸出自身的程式)C語言UI
- 深度學習例項之基於mnist的手寫數字識別深度學習
- 利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
- 一個簡單的完整人臉識別系統
- 一個簡單快速的OCR表單識別錄入工具
- 利用opencv 做一個簡單的人臉識別OpenCV
- 使用 Vala 編寫一個簡單的文字識別程式
- 手把手教你用node擼一個簡易的headless爬蟲cli工具爬蟲
- 實戰四:手把手教你實現數字識別
- 任務系統 / 擊殺指定數量怪物後完成任務
- 使用quartz.net 完成一個winform版的任務提醒工具quartzORM
- mnist手寫數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)深度學習Keras模型
- 手把手教你用 Go 實現一個 mTLSGoTLS
- 簡單易用的任務佇列-beanstalkd佇列Bean
- linux下定時任務的簡單示例Linux
- 手把手教你用Python建立簡單的神經網路(附程式碼)Python神經網路
- 目前待完成的任務們
- WPF 做一個超級簡單的 1024 數字接龍游戲
- 使用TensorFlow 來實現一個簡單的驗證碼識別過程
- 技術實踐——教你用100行寫一個 go 的協程池 (任務池)!!!Go
- 手把手教你手寫一個最簡單的 Spring Boot StarterSpring Boot
- 爬蟲學習日記(六)完成第一個爬蟲任務爬蟲
- 手把手教你完成數字動態變化顯示效果
- 【Python】keras使用Lenet5識別mnistPythonKeras
- 【Python】keras神經網路識別mnistPythonKeras神經網路
- C#編寫一個在asp.net core 3.1下的簡單的corn模式的計劃任務和一個更簡單的定時器類C#ASP.NET模式定時器
- 【小白學PyTorch】15 TF2實現一個簡單的服裝分類任務PyTorchTF2
- 一個簡單的基於 Redis 的分散式任務排程器 —— Java 語言實現Redis分散式Java
- 如何實現簡單的定時全域性唯一任務?
- CNN也能用於NLP任務,一文簡述文字分類任務的7個模型CNN文字分類模型
- 如何高效完成領導安排的複雜工作任務?羅列待辦任務清單很有效