在本文中,我們将讨論卷積層中的兩個重要概念。
- 如何計算參數的數量?
- 産出的形狀是如何計算的?
術語
input_shape
Input_shape = (batch_size, height, width, depth)Batch_size =一次向前/向後傳遞的訓練資料數
output_shape
Output_shape = (batch_size, height, width, depth)
過濾器/核
在卷積神經網絡中,輸入資料與卷積核進行卷積,卷積核用于提取特征。卷積核是一個矩陣,它将移動到圖像像素資料(輸入)上,并将執行與輸入資料的特定區域的點積,輸出将是點積的矩陣。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pml2ZuEjY3Q2N3EWNjVDOjJjZxQjZzgzYiZjY1UWN2EjZ0MDOvw1N0YDMyIzNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.gif)
計算卷積層中輸出的參數個數和形狀
示例1
輸入:
filter= 1
kernel_size = (3)
input_shape =(10、10、1)
讓我們計算Conv2D中的參數數量和輸出形狀。
如何計算卷積層中的參數個數?
權重:(3,3)= 3*3 =9的卷積核
偏置:1[每個卷積核将添加一個偏置。由于隻使用了一個卷積核,偏置=1*1]
一個大小為(3,3)的濾波器核的總參數= 9+1 =10
如何計算輸出形狀?
S→stride, p→padding, n→input size, f→filter size
預設Stride =1,沒有提到填充(是以,p=0)
輸出形狀= n-f+1 = 10-3 +1 =8
在使用卷積濾波器對輸入圖像應用卷積後,輸出将是一個特征映射。特征圖中的通道數量取決于所使用卷積核的數量。在這個示例中,隻使用了一個卷積核。是以,特征圖中的通道數為1。
是以,特征圖的Output_shape = (8,8,1)
model1=keras.models.Sequential()
model1.add(Conv2D(filters=1,kernel_size=3,input_shape=(10,10,1),activation='relu'))
model1.summary()
複制
示例2
輸入:
- filters = 5
- kernel_size=(3,3)
- input_shape=(10,10,1)
如何計算卷積層中的參數個數?
權重:(3,3)= 3 * 3 =9的卷積核
偏置:1
總參數= 9+1 =10
過濾器的總數= 5
卷積核的總參數= 10 * 5=50
如何計算輸出形狀?
n = 10, f = 3 s = 1, p = 0
預設Stride =1,沒有提到填充(是以,p=0)
輸出形狀= n-f+1 = 10-3 +1 =8
在使用卷積濾波器對輸入圖像應用卷積後,輸出将是一個特征映射。特征圖中的通道數量取決于所使用的過濾器的數量。在這個例子中,使用了5個過濾器。是以,特征圖中的通道數為5。
是以,特征圖的Output_shape = (8,8,5)
model2=keras.models.Sequential()
model2.add(Conv2D(filters=5,kernel_size=3,input_shape=(10,10,1),activation='relu'))
model2.summary()
複制
示例3
輸入:
- filter = 5
- kernel_size = (3)
- input_shape = (10 10 3)
如何計算卷積層中的參數個數?
權重:(3,3)= 3*3 =9的卷積核
卷積核将同時卷積所有三個通道(input_image depth=3)。是以一個卷積核的參數是3 * 3 * 3=27[卷積核大小 * 通道數]
偏置:1
[每個卷積核加一個偏置]
對于深度3,一個大小為(3,3)的卷積核的總參數=(3 * 3 * 3)+1=28
卷積核的總數= 5。
卷積核的總參數:5個大小為(3,3),input_image depth(3)= 28*5=140
如何計算輸出形狀?
n = 10, f = 3 s = 1, p = 0
預設Stride =1,沒有提到填充(是以,p=0)
輸出形狀= n-f+1 = 10-3 +1 =8
在使用卷積核對輸入圖像應用卷積後,輸出将是一個特征映射。特征圖中的通道數量取決于所使用的過濾器的數量。在這個例子中,使用了5個卷積核。是以,特征圖中的通道數為5。
是以,特征圖的Output_shape = (8,8,5)
model3=keras.models.Sequential()
model3.add(Conv2D(filters=5,kernel_size=3,input_shape=(10,10,3),activation='relu'))
model3.summary()
複制
作者:Indhumathy Chelliah