CNN在圖像處理和視頻處理領域有著廣泛的應用。讓我們了解CNN是如何運作的。
在本文中,我將介紹有關卷積神經網絡如何演變的具體信息以及它們為何如此優秀的圖像。我們還將進行實際操作,我們將運用Keras構建卷積神經網絡。
什么是卷積神經網絡(CNN)?
卷積神經網絡與普通神經網絡類似。它們也由神經元組成,并學習權重和偏差。它們將圖像作為輸入,然后對體系結構中的某些屬性進行編碼。
卷積神經網絡(convolutional neural network)示意網絡運用一種稱為卷積的數學運算。
卷積是實值參數的兩個函數的運算。
此操作在數學中稱為卷積
在卷積神經網絡術語中,卷積的第一個參數通常稱為輸入,第二個參數稱為核,它們的輸出稱為特征映射。
現在我將展現如何在我們的CNN中應用這個數學術語“卷積”。
卷積如何在CNN中起作用
因此,您可以看到綠色矩陣是輸入(由輸入圖像的像素組成的矩陣),黃色矩陣是核。所以在這里你可以看到核矩陣如何與輸入矩陣卷積以給我們一個特征映射。您可以看到特征圖的尺寸發生了一些變化。不用擔心我們會在一段工夫后具體介紹它。讓我們繼承下一個主題是Pooling。
池化層
池化層主要用于連續卷積層之間。它用于減少示意的空間大小,以減少參數的數量和網絡的計算。池化層獨立應用于輸入的每個深度切片,并減少輸入的空間維度。它主要用于減少適度擬合。假如我們在輸入上應用MAX POOLING,filter大小為2X2,步幅為2,那么它將在寬度和高度上對輸入大小進行下采樣,保持深度不受影響,這意味著它丟棄了75%的激活。現在下面是一個圖像,其中包含如何完成池化層。
Max Pooling正在此圖像中施行
這是運用最大池化進行下采樣的方式
現在我們將討論用于計算輸出層尺寸的公式。
計算輸出特征圖的尺寸的公式

在該公式中,p和s分別是padding 和striding。我們將逐一了解它的細節。
padding
padding 用于在邊緣周圍添加額外的像素。實際上,Padding所做的是確保角落處的像素得到所需的關注。注重,我的意思是在內核環繞輸入矩陣旋轉時的卷積中,中間的像素在卷積操作中出現不止一次時獲得更多權重,而角落像素僅觸及一個卷積操作。因此,padding 在原始矩陣周圍提供額外的一層或更多層,以便考慮角點像素。
在此圖中Zero padding
Striding
在卷積神經網絡中Striding十分重要。我將在這里討論如何在兩個圖像的幫忙下完成Striding以使其清楚。
Max Pooling,Striding為2
所以在這張圖片中,我們可以看到,一步,我們正在跳兩格,而不是發送紅色框。運用更大Striding的一個主要原因是減少輸出特征圖中的參數數量。
現在我們預備設想自己的CNN模型了。
設想卷積神經網絡
在這一部分中,我們將設想自己的卷積神經網絡。CNN由卷積層,池化層和全聯結層組成(我們可以在最后添加softmax以解決多類問題)。
我們將運用的架構如下圖所示。我將運用Keras完成。現在,讓我們進入架構。所以我們將完成一個兩層卷積神經網絡,并且我運用了ReLU激活函數和最大池化技術。有兩個全聯結層,最后有softmax激活。
CNN架構
Python完成如下:
model=Sequential()model.add(Conv2D(32,kernel_size=(5,5),strides=(1,1),activation='relu',input_shape=input_shape))model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))model.add(Conv2D(64,(5,5),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Flatten())model.add(Dense(1000,activation='relu'))model.add(Dense(num_classes,activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.SGD(lr=0.01),metrics=['accuracy'])model.fit(x_train,y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test,y_test),callbacks=[history])
在第一層,我們運用了32個大小為5X5的filter,具有步幅1和ReLU激活函數。接下來,我們添加了最大池進行池化。在該層中,我們運用了64個大小為5X5的過濾器,然后是最大池化層。然后我們運用了一個flattened 層。之后,我們分別運用了具有ReLU和softmax激活的兩個dense 層。然后我們運用交叉熵作為我們的損失函數和隨機梯度下降(SGD)來最小化損失。然后我們根據我們的用例練習模型。
所以你看到運用Keras編寫CNN是很輕易的。請嘗試運用您自己的數據集完成。
評論前必須登錄!
立即登錄 注冊