【ATU Book-i.MX8 系列 - TFLite】Tensorflow 1. x 建立手寫識別

一.   概述

上篇文章說明了 Tensorflow 1.x 的基本運算概念以及當時官方相當推從的 靜態圖(Graph) 的設計理念 ! 相信各位對於 Tensorflow 1.x 是有一定程度的了解,因此本篇就將帶領各位一步步去搭建神經網路架構、訓練模組、最後實現手寫識別 !! 趕快跟上 AI 潮流,開啟 Jupyter Notebook 來實作吧!!

如下圖所示,為系列博文之示意架構圖。此架構圖隸屬於 i.MX8M Plus 的方案博文中,並屬於 eIQ 機器學習開發環境 內的 推理引擎層(Inference Engines Layer) 的子系列 !! 目前章節介紹 “Tensorflow 1. x 建立手寫識別”,若欲架設 2.x 的版本請參照該系列的運算概念。

若新讀者欲理解人工智慧、機器學習以及深度學習的差異,可點選查閱下方博文
大大通精彩博文   探討機器學習與深度學習之差異

 TFlite 系列博文 - 文章架構示意圖 (1)

 

TFlite 系列博文 - 文章架構示意圖 (2)

 

二.  Tensorflow 1.x  建立手寫識別

使用搭建環境 : Python 3.6 + Windows 10 + Tensorflow 1.15

本節將介紹如何使用原生 TensorFlow 建立手寫辨識之 CNN 卷積神經網路,並以拆分細節的方式來闡述。
若欲快速建立神經網路或是模組化的撰寫程序,請參照 TensorFlow 的進階 API : Keras、TFLearn、TF-Slim。

(1)  深度學習基礎概念 :

在練習手寫識別之卷積網路前,我們必須簡單地了解一下深度學習的概念,以利於加深印象 !! 所謂的 深度學習(Deep Learning) 是隸屬於人工智能與機器學習的一項新穎知識,隨著運算能力大幅度提升而神經網路的概念受到重用,竟而提倡出 「深度」的概念 !! 如下圖所示,白話一點就是不斷利用 卷積(Convolution) 的概念,提取出影像中細節 !! 透過一層一層的提取,也讓資料量不斷增加就如同深度一般 !!

深度學習概念示意圖

這裡將深度學習拆分成四大步驟,分別為 收集資料 、建立卷積神經網路架構、訓練卷積神經網路架構、預測結果。建立神經網路的第一步,往往都是收集資料( database資料庫) …而初學者不必須要花費心力去收集,僅需要善用網路上或官方提供的資源即可。有了資料後,就可以開始去搭建神經網路架構,對於架構的設計是需要有一定程度的知識理解,這裡建議先學會使用為主,後續再來探討深入細節 !! 在架設好之後,就可以進行神經網路的訓練,這將透過所建立的網路架構與資料去學習圖片中的手寫數字。在訓練之前必須先每張圖片標記上分類(官方已經標註),也就是常見的 label.txt 檔案!! 利用這些分類定義告知機器什麼是數字 1、數字2 … 而訓練過後所記錄下的分類規則(權重) 就是所謂的 模組(model)。最後我們就可以使用模組來驗證預測結果是否正確 !!

 

深度學習步驟示意圖

 

深度學習四大步驟 :收集資料 、建立卷積神經網路架構、訓練卷積神經網路架構、預測結果

 (2) 收集資料

 下載經典的手寫辨識資料集 MNIST : 


 開啟 Jupyter Notebook 撰寫代碼 : 



下載完成手寫辨識數據集 MNIST : 

若顯示以下資訊則代表,下載成功並顯示資料集資訊


 

(3) 建立卷積神經網路

建立卷積神經網路架構須一步步建立起輸入層、卷積層、池化層、全部連接層、隱藏層、輸出層才能構成神經網路架構,如同下圖所示。而本篇文章只介紹經典的模型架構,細節的架設就不於此探討,這裡強調建立原生 Tenosrflow 1.x 技術,須先以 TensorFlow 靜態圖的概念,建置好架構後即可運作。

 延續上一步,建立 卷積神經網路架構(CNN) 代碼 : 

Tensorflow 1.x 函式使用方式 : https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/nn



(4)  訓練卷積神經網路

建立卷積神經網路架構後,即可利用訓練數據來訓練神經網路構成模型(Model)

延續上一步,建立 訓練模型 代碼

*** 為了篇幅,訓練過程移至”手寫識別預測”章節內呈現



(5)  進行手寫識別預測

訓練完成模型後,即可使用測試數據預測結果是否恰當。

 延續上一步,建立 預測模型 代碼



開始訓練 (結果) : 



繪出損失曲線與準確度 (結果) : 

預測結果 (結果) : 

觀察圖片上手寫的數字與預測值(predict) 是否相同

三.  結語

經由上述實作,相信各位已經成功的建立第一支手寫識別之神經網路並看到預測結果!! 目前這基礎範例所預測的準確度約 98% 左右 !! 預測的結果是相當準確的 !! 若想深度研究仍須要思考測試與訓練資料的樣本、神經網路的架構、學習率、過擬合(Overfitting)、梯度消失等等機器學習會遇到的問題,而本篇系列暫不探討此部分,後續文章將朝輕量化模組的部分前進,以 NXP i.MX8 平台帶領讀者實現Tensorflow Lite 手寫識別,體驗輕量化網路運算速度!! 敬請期待!!

 

四.  參考文件

[1] ITREAD    - 從0.1到2.0一文看盡TensorFlow奮鬥史
[2] 軟體之心  - 包裝再升級?Tensorflow 2.0的重大改變
[3] WiKi        -  Keras開源神經網路庫
[4] 科技報橘 -  手機上的輕量版 AI 運算,TensorFlow Lite 問世!
[5] Anaconda - 官方網站
[6] Tensorflow – 官方網站
[7] 深智數位 – Tensorflow 1.x/2.x 完整工程實作

如有任何相關 Tensorflow Lite 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 Tensorflow Lite 的技術文章 !!敬請期待 【ATU Book-i.MX8 系列 - TFLite
!!



★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論