卷積神經網絡-深度學習

卷積神經網絡(CNN)是一類深度神經網絡。這是受人類大腦視覺皮層的啟發。每當我們看到某些東西時,一系列的神經元皮層就會被激活,每層都會檢測到一些特徵,如線條,邊緣(如垂直邊緣,水平邊緣)。

卷積神經網絡-深度學習

CNN廣泛用於 圖像識別 , 圖像分類,對象檢測,人臉識別等。

過度簡化圖:

CNN的基本層: - C onvolution - Pooling - Flattening - Fully Connected Layer(Neural network)

卷積神經網絡-深度學習

卷積神經網絡

卷積神經網絡-深度學習

示例

瞭解這一點的一些先決條件:

計算機將輸入圖像視為像素數組,這取決於圖像的分辨率。根據圖像分辨率,可以看到 h * w * d(h =高度,w =寬度,d =維度)。

彩色圖像有 3個通道即 RGB,而黑/白圖像只有 一個通道。例如,24*24* 3陣列的 RGB矩陣圖像(3指RGB值)和一幅圖像為4 * 4 * 1陣列的灰度矩陣(b / w)圖像。

卷積神經網絡-深度學習

現在讓我們瞭解過濾器(卷積/特徵圖):

卷積神經網絡-深度學習

要應用某些過濾器,我們需要將圖像與過濾器矩陣相乘。以下是標準過濾器及其矩陣表示的一些示例。

過濾器的重要性:

在自動駕駛汽車的情況下,邊緣檢測過濾器非常重要。

現在我們已經準備好了解CNN層及其工作原理。

卷積層(Convolution Layer)

卷積是從輸入圖像中提取特徵的第一層。這裡我們將輸入圖像與不同的卷積(過濾器)相乘以獲得具有提取特徵的新圖像。

例如:考慮一個6 * 6 * 3的圖像,這裡我們應用兩個尺寸為3 * 3 * 3的不同過濾器,輸出為4 * 4

卷積神經網絡-深度學習

輸出的公式:

  • 輸入(Input): n * n * nc
  • 過濾器(Filter): f * f * nc
  • 填充(Padding): p (本文後面部分介紹)
  • 步幅(Stride): s

Stride是輸入矩陣上的像素移位數。當步幅為1時,我們一次將過濾器移動到1個像素。當步幅為2時,我們一次將過濾器移動到2個像素,依此類推

  • 輸出: [(n+2p-f)/s+1] *[(n+2p-f)/s+1] *nc'

例如:n = 6,p = 0,f = 3,s = 1,

[(6+(0*2)–3)/1+1]*[(6+(0*2)–3)/1+1]*3 = 4*4*3

nc是輸入和過濾器中的通道數,而nc'是過濾器的數量。

工作說明:

卷積神經網絡-深度學習

池化層(Pooling Layer)

當圖像太大時,池化層會減少參數的數量。它減少了每個映射的維度,但保留了重要信息。空間池化(Spatial pooling )可以是不同類型的:

  • 最大池化
  • 均支池化
  • 求和池化

最大池化從調整過的特徵映射中獲取最大元素。採用最大元素也可以採用均值池化。將特徵映射調用中的所有元素的和稱為求和池化。

卷積神經網絡-深度學習

最大池化

填充(padding)

填充在輸入卷積的外部添加額外的0,以便卷積最終具有與輸入相同數量的輸出。如果我們不使用填充,則在每個卷積層之後,邊界處的信息將丟失,這將減小卷積的大小以及性能。

類型:有效填充,相同填充。

在有效填充中,與輸入相比,該特徵的維度降低,而在相同填充中,維度增加或保持相同。

卷積神經網絡-深度學習

零填充

展平(Flattening )

在應用了所有上述層後,我們得到矩陣形式的最終輸出,但神經網絡需要向量形式(1D)的輸入數據,因此我們需要將我們的池化的特徵映射展平成如下圖所示的列。

卷積神經網絡-深度學習

完全連接層(Fully connected Layer)(FC)

在這裡,我們將展平數據提供給FC的輸入層(例如 x1,x2 ...)。我們在中間層應用ReLU等激活函數。

這裡基本的神經網絡工作發生像反向傳播,優化。

卷積神經網絡-深度學習

激活函數:

在中間層中,優選ReLu,而對於輸出層,則使用Softmax或sigmoid。

以下是部分代碼展示:

Importing the Libraries and Packages

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
卷積神經網絡-深度學習

創建神經網絡的第一步是使用keras中的順序類初始化網絡。

Initialising the CNN
model = Sequential()
Convolutional Layer
model.add(Convolution2D(filters = 32, kernel_size = (3, 3),
input_shape = (64, 64, 3),
activation = ‘relu’))

卷積神經網絡-深度學習

池化層

model.add(MaxPooling2D(pool_size = (2, 2)))
卷積神經網絡-深度學習

pool_size:池化窗口的形狀。

展平層

model.add(Flatten())

完全連接的層

Adding the Hidden layer
model.add(Dense(units = 128, activation = ‘relu’))
Adding the Output Layer
model.add(Dense(units = 1, activation = ‘sigmoid’))
卷積神經網絡-深度學習

編譯CNN

model.compile(optimiser = ‘adam’,loss = ‘binary_crossentropy’,metrics = [‘accuracy’])
卷積神經網絡-深度學習

重要提示:

如果訓練的數據非常少,那麼我們可以通過應用縮放,翻轉原始圖像和創建新圖像等操作從現有數據創建新數據。

Generating Image Data
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.1,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
卷積神經網絡-深度學習


分享到:


相關文章: