Python人工智能深度學習CNN

1.CNN概述

CNN的整體思想,就是對圖片進行下采樣,讓一個函數隻學一個圖的一部分,這樣便得到少但是更有效的特征,最後通過全連接神經網絡對結果進行輸出。

整體架構如下:

輸入圖片

→卷積:得到特征圖(激活圖)

→ReLU:去除負值

→池化:縮小數據量同時保留最有效特征

(以上步驟可多次進行)

→輸入全連接神經網絡

2.卷積層

CNN-Convolution

卷積核(或者被稱為kernel, filter, neuron)是要被學出來的,卷積核中的數就是權重(參數)

做內積,把卷積核的每一個參數和圖像中對應位置的數字相乘(對應位置的元素相乘,不同於矩陣乘法),再求和。相當於一個神經元,對輸入的數據,進行權重的分配,而權重就是卷積核的數據。再求和,就是第一個神經元所得到的結果。把這個權重對圖片所有數據進行處理,就得到第一個激活圖或特征圖(feature map)。我們可以增加卷積核的數量,就會得到多層激活圖,可以更好的保留數據的空間尺寸。

當卷積核與圖片進行相乘相加的時候,如果卷積核此時正在計算的區域數字分佈與卷積核類似,所得的求和結果會很大(稱為卷積核被激活瞭),而其他地方會很小,說明圖像在這個區域,有和卷積核類似的圖案。

一個卷積核隻能識別一個特征。因此我們需要添加多個卷積核,卷積核越多,得到的激活圖就越深,輸入圖像的信息就越多。

對於彩色的圖來說,不需要把顏色分開,卷積核的深度和圖像深度是一樣的,比如彩色是紅綠藍三層,那麼卷積核也是三層。

卷積層相當於降采樣的神經網絡,如下圖,本來應該連接36個神經元,但實際連接瞭9個。

3.池化層

CNN-MaxPooling

在Max Pooling,也就是池化層之前,會需要進行一個ReLU函數轉化,即把小於0的值全轉為0,其他的不變。

池化層主要就是為瞭減少數據量,選一個尺寸之後,直接用尺寸中的最大值代替那個尺寸。這樣可以減少數據從而減少運算量。

如下圖所示,輸入數據原本是6*6,通過卷積層之後變成4*4,通過池化層之後變成2*2。對於實際的圖片來說,維度可能很高,因此卷積層,池化層可以多次進行。

4.全連層

將最後得到的高層次特征輸入全連接的神經網絡,即全連層。全連層就是一個全連接的神經網絡,它的參數數量就是最後的池化層輸出的數據數量。

同樣的,前向傳播後,計算損失函數後進行後向傳播,得到各參數的梯度,對各參數進行更新,直到找到最佳參數。

因此,在全連接之前的所有層,不管多少層的卷積、池化,都是為瞭得到更好的特征的同時降低數據量。使得模型可以更好地訓練。

以上就是Python人工智能深度學習CNN的詳細內容,更多關於人工智能CNN深度學習的資料請關註WalkonNet其它相關文章!

推薦閱讀: