神經網路中的填充是什麼
簡介
填充是卷積神經網路中使用最廣泛的概念之一。對於每個神經網路工程師和深度學習工程師來說,這是一個眾所周知的概念,可以有效地從深度學習中給定的資料集中提取有用的資訊。
在本文中,我們將討論填充,它是什麼,為什麼我們需要在神經網路中進行填充,它的意義是什麼,以及如何使用程式碼示例在神經網路中應用填充。本文將幫助讀者從零開始理解填充,並在需要時應用它。
什麼是填充?
在直接進入填充的概念之前,讓我們討論卷積神經網路及其用例。卷積神經網路是一種智慧神經網路,它使用影像資料集。在這裡,網路將影像作為輸入,並識別資料的不同模式和行為。根據對輸入影像資料集的識別,輸出將被提供。
現在,影像大小以畫素為單位,每個不同的影像資料集可以具有不同大小的影像,並且神經網路也應該根據輸入影像大小進行最佳化。
填充是在輸入影像(在其邊界)中新增的一種額外圖層。例如,假設我們有一個大小為 10*10 畫素的輸入影像,那麼我們可以在影像中新增一層填充,這將使影像的大小增加到 11*11。
透過向輸入影像新增額外的畫素層,我們獲得了幾個優點,最終增強了卷積神經網路模型的效能。
大多數情況下,我們新增一個填充為零的額外層,這稱為零填充。它將在影像外部的新增的額外層中包含所有零。
現在讓我們討論填充的意義以及需要向影像新增填充層的原因。
為什麼要新增填充?
在神經網路中,尤其是在處理影像資料集時,填充提供了許多優勢。
資訊丟失
在使用卷積神經網路時,我們有一張影像,在其上應用核心或濾波器,它基本上對輸入影像執行運算並返回一個大小可能更小的影像。
例如,如果我們有一個大小為 10*10 畫素的影像,並且如果將 3*3 濾波器應用於影像,則輸出影像的大小將為 8*8 畫素,小於實際影像,因此我們丟失了來自實際重要影像的一些資訊。
在這種情況下,新增額外的填充層可以增強輸入影像的大小;此外,影像的輸出層將是填充層,其中包含零,因此在應用濾波器後,填充層的資訊將丟失,而不是影像實際部分的核心資訊。
外部部分資訊
在某些情況下,我們實際上對影像的中間部分不感興趣。相反,我們對影像的外部部分感興趣,其中可能包含一些對模型訓練非常有用的資訊。在這種情況下,來自影像外部部分的畫素讀取或畫素觀察對於模型的訓練至關重要。
現在,當將濾波器應用於實際影像時,它會減小實際影像的大小,並且來自影像外部部分的畫素資訊可能會丟失。
填充在這種情況下將節省我們,其中額外的畫素層最終將使影像的外部部分成為中心部分。因此,濾波器或核心將關注這一點,其中來自外部部分的資訊不會丟失,並將被視為模型訓練的重要引數。
相同的輸入大小
正如我們上面討論的那樣,應用核心或濾波器可能會減小實際影像的大小,這可能會導致某些資訊丟失。在某些情況下,我們可能需要影像的精確大小,而這在應用濾波器後也無法實現。
在這種情況下,在輸入層中新增額外的填充層最終將增強實際影像的大小,這將導致在將濾波器應用於同一影像後減小輸入影像的適當大小。
例如,如果我們有一個大小為 10*10 畫素的影像,並且如果我們正在應用大小為 3*3 畫素的濾波器,則輸出影像的大小將為 8*8 畫素。但是,向輸入層新增一層填充最終將增強輸出影像的大小,這將為 10*10 畫素。
示例
現在讓我們討論在神經網路中實現填充。
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D # Create a Sequential model model = Sequential() # Add a convolutional layer with padding='valid' (no padding) model.add(Conv2D(32, kernel_size=(3, 3), padding='valid', activation='relu', input_shape=(28, 28, 3))) # Add another convolutional layer with padding='same' model.add(Conv2D(64, kernel_size=(3, 3), padding='same', activation='relu')) # Print the model summary model.summary()
輸出
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 896
conv2d_1 (Conv2D) (None, 26, 26, 64) 18496
=================================================================
Total params: 19,392
Trainable params: 19,392
Non-trainable params: 0
_________________________________________________________________
在上面,我們可以看到我們在神經網路的層中應用了填充,這將在影像中新增額外的畫素層,並將相同的畫素層傳遞到下一層。
這裡 padding = valid - 意味著不會新增任何畫素,padding = same - 意味著模型將自動嘗試在填充的幫助下使輸入和輸出影像的大小相同。
結論
在本文中,我們討論了神經網路中的填充,它們是什麼,它們的意義是什麼,以及如何向神經網路新增填充。本文將幫助讀者理解填充,並在需要時應用它。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP