【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次,发文人进小黑屋喔~

评论