TensorFlow中利用CNN處理影象總結
看了很多書,也實戰了,但是總想用通俗的語言來講述一下CNN處理的過程,今天我有幸和大家分享一下。
首先,卷積神經網路就是至少包含一層的神經網路,該層的功能是:計算輸入f與可配置的卷積核g的卷積,生成輸出。卷積的目的就是把卷積核應用到某個張量的所有點上,通過卷積核的滑動生成新的濾波後的張量。卷積的價值在於對輸入降維能力,通過降維改變卷積核的跨度strides引數實現。設定跨度是調整輸入張量維數的方法,strides引數格式與輸入向量相同,面臨挑戰:如果應對輸入在邊界,可以採用對影象邊界填充方式。資料格式NHWC(數目,高度,寬度,通道數)。卷積核的作用常常是增強卷積核中心位置畫素的灰度。
然後,卷積神經網路CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。由於CNN的特徵檢測層通過訓練資料進行學習,所以在使用CNN時,避免了顯式的特徵抽取,而隱式地從訓練資料中進行學習;再者由於同一特徵對映面上的神經元權值相同,所以網路可以並行學習,這也是卷積網路相對於神經元彼此相連網路的一大優勢。卷積神經網路以其區域性權值共享的特殊結構在語音識別和影象處理方面有著獨特的優越性,其佈局更接近於實際的生物神經網路,權值共享降低了網路的複雜性,特別是多維輸入向量的影象可以直接輸入網路這一特點避免了特徵提取和分類過程中資料重建的複雜度。啟用函式:為神經網路的輸入引入非線性,通過曲線能夠刻畫輸入中更為複雜的變化,設計模型常推薦tf.nn.relu,tf.sigmoid,tf.tanh,tf.nn.dropout,效能較為突出,評價一個啟用函式是否有用的因素如下:單調,採用梯度下降法尋找區域性極值點;可微分,保證任何一個點可以求導數,可以使梯度下降法用到啟用函式的輸出上。
最後,CNN卷積神經網路層級結構 CNN網路一共有5個層級結構:
1 輸入層:與傳統神經網路/機器學習一樣,模型需要輸入的進行預處理操作,常見的輸入層中預處理方式有:去均值 歸一化 PCA/SVD降維等
2 卷積層: 就是區域性感知,人的大腦識別圖片的過程中,並不是一下子整張圖同時識別,而是對於圖片中的每一個特徵首先區域性感知,然後更高層次對區域性進行綜合操作,從而得到全域性資訊。
3 激勵層:實際上是對卷積層的輸出結果做一次非線性對映。如果不用激勵函式(其實就相當於激勵函式是f(x)=x),這種情況下,每一層的輸出都是上一層輸入的線性函式。容易得出,無論有多少神經網路層,輸出都是輸入的線性組合,與沒有隱層的效果是一樣的,這就是最原始的感知機了。 常用的激勵函式有:Sigmoid函式 Tanh函式 ReLU Leaky ReLU ELU Maxout 我自己對激勵層處理建議:首先ReLU,因為迭代速度快,但是有可能效果不佳。如果ReLU失效的情況下,考慮使用Leaky ReLU或者Maxout,此時一般情況都可以解決。Tanh函式在文字和音訊處理有比較好的效果。
4 池化層 (Pooling):也稱為欠取樣或下采樣。主要用於特徵降維,壓縮資料和引數的數量,減小過擬合,同時提高模型的容錯性。主要有:Max Pooling:最大池化 Average Pooling:平均池化通過池化層,使得原本44的特徵圖壓縮成了22,從而降低了特徵維度。雖然人不太容易分辨出池化後的特徵圖,但是沒關係,機器還是可以識別的。
5 輸出層(全連線層) 經過前面若干次卷積+激勵+池化後,來到了輸出層,模型會將學到的一個高質量的特徵圖片全連線層。其實在全連線層之前,如果神經元數目過大,學習能力強,有可能出現過擬合。因此,可以引入dropout操作,來隨機刪除神經網路中的部分神經元,來解決此問題。還可以進行區域性歸一化(LRN)、資料增強等操作,來增加魯棒性。當來到了全連線層之後,可以理解為一個簡單的多分類神經網路(如:BP神經網路),通過softmax函式得到最終的輸出。整個模型訓練完畢。兩層之間所有神經元都有權重連線,通常全連線層在卷積神經網路尾部。也就是跟傳統的神經網路神經元的連線方式是一樣的。
今天就分享到這裡。