[資料分析&機器學習] 第5.1講: 卷積神經網絡介紹(Convolutional Neural Network)

Yeh James
JamesLearningNote
Published in
Dec 24, 2017

卷積神經網絡(Convolutional Neural Network)簡稱CNN,CNN是所有深度學習課程、書籍必教的模型(Model),CNN在影像識別方面的威力非常強大,許多影樣辨識的模型也都是以CNN的架構為基礎去做延伸。另外值得一提的是CNN模型也是少數參考人的大腦視覺組織來建立的深度學習模型,學會CNN之後,對於學習其他深度學習的模型也會很有幫助,本文將為示範如何使用CNN來達成99%正確度的手寫數字辨識。

CNN的概念圖如下:

CNN概念圖
CNN概念圖2

簡單來說,圖片經過各兩次的Convolution, Pooling, Fully Connected就是CNN的架構了,因此只要搞懂Convolution, Pooling, Fully Connected三個部分的內容就可以完全掌握了CNN!

1. Convolution Layer卷積層

卷積運算就是將原始圖片的與特定的Feature Detector(filter)做卷積運算(符號⊗),卷積運算就是將下圖兩個3x3的矩陣作相乘後再相加,以下圖為例 0*0 + 0*0 + 0*1+ 0*1 + 1 *0 + 0*0 + 0*0 + 0*1 + 0*1 =0

卷積運算

依序做完整張表

卷積運算

中間的Feature Detector(Filter)會隨機產生好幾種(ex:16種),Feature Detector的目的就是幫助我們萃取出圖片當中的一些特徵(ex:形狀),就像人的大腦在判斷這個圖片是什麼東西也是根據形狀來推測

16種不同的Feature Detector

利用Feature Detector萃取出物體的邊界

利用Feature Detector萃取出物體的邊界

使用Relu函數去掉負值,更能淬煉出物體的形狀

其他函數

2. Pooling Layer 池化層

在Pooling Layer這邊主要是採用Max Pooling,Max Pooling的概念很簡單只要挑出矩陣當中的最大值就好,Max Pooling主要的好處是當圖片整個平移幾個Pixel的話對判斷上完全不會造成影響,以及有很好的抗雜訊功能。

3. Fully Connected Layer 全連接層

基本上全連接層的部分就是將之前的結果平坦化之後接到最基本的神經網絡了

實作

接下來的實作會教大家如何使用CNN來達成99%正確度的手寫數字辨識,在一開始安裝需要安裝Tensorflow以及Keras,只需要在你的命令提示字元或是終端機輸入以下的安裝指令就可以了

Mnist手寫數字資料集

pip install tensorflow==1.3.0 (寫此篇文章的當下1.4尚有Bug,建議使用1.3版)

pip install keras

載入套件,跳出訊息說明Keras背後是使用Tensorflow當做底層運算架構

載入Mnist手寫辨識資料

Training的資料有60000筆而Testing的資料有10000筆都是28*28 pixel大小的手寫數字圖片

畫出圖片長相以及Label

由於圖片通常是RGB三個顏色所組成的,假設圖片大小是28*28的彩色圖片,實際上的資料維度就是28*28*3。不過這邊數字的顏色都是單色因此我們轉成28*28*1的資料維度當作未來CNN Model的input

灰階的圖片數值為0~255之間,我們將它縮放到0~1之間,並對類別資料做onehot-encoding處理

我們在這邊可以看到若使用Keras來建立CNN模型只要幾行Code就可以完成了,非常簡單!一開始先建立一個Sequential模型,接著一層一層加上去就可以了

在層跟層之間通常會Drop掉一定比例的神經元來避免Overfit的狀況,要Drop掉多少比例沒有一個特定的值,通常是25%~50%之間

開始訓練模型,這邊可以看到每一輪的迭代acc 以及 val_acc的準確度都慢慢再提高,從一開始的acc(training):83% val_acc(testing):96%的準確度,到第20輪時acc 以及val_acc 都變成99%的準確度了

補充

本文較粗淺的介紹Deep learning中的CNN模型,若想要再更加全面的了解Deep Learning 以及 CNN,建議大家可以閱讀TensorFlow+Keras 深度學習人工智慧實務應用Deep Learning|用Python進行深度學習的基礎理論實作這兩本好書,以及Udemy上的Deep Learning線上課程

程式碼

新版(keras 整合進 tensorflow 之後的版本)

舊版

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

[Python資料分析&機器學習]這系列文章是我在Hahow上面所開設課程的講義,如果你是新手想著看影片一步一步學習,可以參考這門課:https://hahow.in/cr/pydataml

如果你對什麼主題的文章有興趣的話,歡迎透過這個連結告訴我:https://yehjames.typeform.com/to/XIIVQC
有任何問題也歡迎在底下留言或是來信告訴我: yehjames23@gmail.com

參考閱讀

  1. TensorFlow+Keras 深度學習人工智慧實務應用
  2. Udemy Deep learning 課程
  3. Deep Learning|用Python進行深度學習的基礎理論實作
  4. 【机器学习】彻底搞懂CNN

--

--