CNN中的卷積操作的參數數計算


之前一直以為卷積是二維的操作,而到今天才發現卷積其實是在volume上的卷積。比如輸入的數據是channels*height*width(3*10*10),我們定義一個核函數大小為3*3,則輸出是8*8。實際核函數的參數量是3*3*channels,在本例子中就是3*3*3。

舉例:

假設輸入的tensor是3*10*10,定義一個大小為3*3的kernel,如果進行一個conv2d操作,輸出的feature map是5的話,那么這個conv2d涉及的參數數是3*3*3*5+5=140個,輸出大小5*8*8。其中3*3*3代表的是核參數,5代表的是bias數。

驗證代碼:

from keras.layers import Dense, Conv2D
from keras.models import Sequential
model = Sequential()
conv1 = Conv2D(5, 3, input_shape=(3, 10, 10))
model.add(conv1)
print(model.summary())

_________________________________________________________________

Layer (type)                 Output Shape              Param #  

=========================================================

conv2d_1 (Conv2D)            (None, 5, 8, 8)           140      

=========================================================

Total params: 140

Trainable params: 140

Non-trainable params: 0

_________________________________________________________________

 

3D卷積意思是指在多個channel的volume上進行convolution操作。比如:5個4*10*10(深度、高度、寬度)大小的volume組成的高維數組。假設核大小為2*2*2,stride為1,輸出feature map的數量為4,那么參數數為2*2*2*channels(5)*output feature maps(4)+4=164。輸出大小為4*3*9*9。其中第一個4對應的是feature map數,第二個3對應的是深度,第三個9對應的是高度,第四個9對應的是寬度。

驗證代碼:

 

from keras.layers import Conv3D
from keras.models import Sequential

 

model = Sequential()
conv1 = Conv3D(4, 2, input_shape=(5, 4, 10, 10))
model.add(conv1)

 

print(model.summary())

 

_________________________________________________________________

Layer (type)                 Output Shape              Param #  

=========================================================

conv3d_1 (Conv3D)            (None, 4, 3, 9, 9)        164      

=========================================================

Total params: 164

Trainable params: 164

Non-trainable params: 0

_________________________________________________________________


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM