今天筆者想跟各位聊聊什麼是CNN以及進入CNN的資料預處理,讓我們繼續加油吧!
卷積神經網路介紹
卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,此模型可以使用反向傳播演算法進行訓練,相比較其他神經網路,卷積神經網路需要考量的參數更少,使CNN成為許多人愛用的深度學習結構,將較於其他深度學習結構相比,卷積神經網路在圖像和語音辨識的效能上有卓越的表現,所以可知CNN對於大型圖像之處理相當有幫助,卷積神經網路的構造是由一個或多個卷積層和頂端的全連通層、池化層所編織而成。
接著我們要來探討的是卷積神經網路構造,筆者也不是很清楚,藉由網路的力量找到一些資料,我們一起看看吧!
卷積神經網路結構
卷積層
卷積層是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。此外,在每一個滑動的位置上,卷積核與輸入圖像之間會執行一個元素對應乘積並求和的運算以將感受野內的資訊投影到特徵圖中的一個元素。這一滑動的過程可稱爲步幅,步幅是控制輸出特徵圖尺寸的一個因素。卷積核的尺寸要比輸入圖像小得多,且重疊或平行地作用於輸入圖像中,一張特徵圖中的所有元素都是通過一個卷積核計算得出的,也即一張特徵圖共享了相同的權重和偏置項。
線性整流層
線性整流層(Rectified Linear Units layer, ReLU layer)使用線性整流(Rectified Linear Units, ReLU)作為這一層神經的激勵函式(Activation function)。它可以增強判定函式和整個神經網路的非線性特性,而本身並不會改變卷積層。事實上,其他的一些函式也可以用於增強網路的非線性特性,如雙曲正切函式,或者Sigmoid函式。相比其它函式來說,ReLU函式更受青睞,這是因為它可以將神經網路的訓練速度提升數倍,而並不會對模型的泛化準確度造成顯著影響。
池化層
池化(Pooling)是卷積神經網路中另一個重要的概念,它實際上是一種非線性形式的降採樣。有多種不同形式的非線性池化函式,而其中「最大池化(Max pooling)」是最為常見的。它是將輸入的圖像劃分為若干個矩形區域,對每個子區域輸出最大值。池化層每次在一個池化窗口(depth slice)上計算輸出,然後根據步幅移動池化窗口。下圖是目前最常用的池化層,步幅為2,池化窗口為2X2的二維最大池化層。每隔2個元素從圖像劃分出2X2的區塊,然後對每個區塊中的4個數取最大值。這將會減少75%的資料量,如下圖所示:
步幅為2,池化窗口為2X2的最大池化層(圖片來源:https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C#/media/File:Max_pooling.png )
完全連接層
最後,在經過幾個卷積和最大池化層之後,神經網路中的進階推理通過完全連接層來完成。就和常規的非卷積人工神經網路中一樣,完全連接層中的神經元與前一層中的所有啟用都有聯絡。因此,它們的啟用可以作為仿射變換來計算,也就是先乘以一個矩陣然後加上一個偏差(bias)偏移量(向量加上一個固定的或者學習來的偏差量)。
資料預處理
與MLP有些不同的資料預處理,說明如下
MLP:
image.
reshape(60000,784)
MLP因直接送進神經元處理,所以reshape轉換為60000筆,每一筆有784個數字,作為784個神經元的輸入。
CNN:
image.
reshape(60000,28,28,1)
CNN因為必須進行卷積與池化運算,所以必須保持影像的維度,所以reshape轉換為60000筆,每一筆有28X28X1的影像,分別為28(寬)X28(高)X1(單色)
匯入所需模組
讀取mnist資料
將features(數字影像特徵值轉換為4維矩陣,再將features(數字影像特徵值)標準化,最後以label以Onehot encoding轉換
今天主要是讓大家知道什麼是CNN,明天再繼續努力,加油!
Reference: https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
Reference: 林大貴(2019):TensorFlow+Keras 深度學習人工智慧實務應用。新北市:博碩文化