手把手教你用一個簡單的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手寫數字識別示例
- 這不僅僅是另一個使用TensorFlow來做MNIST數字影象識別的教程
- 手把手教你用React實現一個簡單的個人部落格React
- 手把手教你用 JavaScript 實現一個簡單的國際象棋 AIJavaScriptAI
- 用tensorflow2實現mnist手寫數字識別
- Pytorch搭建MyNet實現MNIST手寫數字識別PyTorch
- Cracker最簡單的任務 (1千字)
- 一個簡單的MapReduce示例(多個MapReduce任務處理)
- 深度學習例項之基於mnist的手寫數字識別深度學習
- 一個簡單的人臉識別庫
- 利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
- 手把手教你用redis實現一個簡單的mq訊息佇列(java)RedisMQ佇列Java
- 在PaddlePaddle上實現MNIST手寫體數字識別
- 手把手教你用C語言寫一個簡單的quine(輸出自身的程式)C語言UI
- 用Scroller完成一個簡單的ViewPagerViewpager
- 一個簡單的完整人臉識別系統
- javascript 實現一個簡單的數字鍵盤JavaScript
- 一個簡單快速的OCR表單識別錄入工具
- 一個簡單的滾動數字的效果實現
- 利用opencv 做一個簡單的人臉識別OpenCV
- 實戰四:手把手教你實現數字識別
- 使用 Vala 編寫一個簡單的文字識別程式
- 任務系統 / 擊殺指定數量怪物後完成任務
- 一個單層的基礎神經網路實現手寫數字識別神經網路
- 使用quartz.net 完成一個winform版的任務提醒工具quartzORM
- 如何訓練一個簡單的音訊識別網路音訊
- javascript獲取數字中最大的一個簡單介紹JavaScript
- 手把手教你用node擼一個簡易的headless爬蟲cli工具爬蟲
- 手把手教你用 1 行命令實現人臉識別
- 手把手教你用 Go 實現一個 mTLSGoTLS
- 簡單易用的任務佇列-beanstalkd佇列Bean
- 目前待完成的任務們
- mnist手寫數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)深度學習Keras模型
- Laravel+Swoole 完成一個簡單的線上聊天室Laravel
- 手把手教你用Docker部署一個MongoDB叢集DockerMongoDB
- linux下定時任務的簡單示例Linux
- Spring定時任務的簡單例子Spring單例