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

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

舉例:ide

假設輸入的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數。函數

驗證代碼:spa

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())3d

_________________________________________________________________input

Layer (type)                 Output Shape              Param #  io

=========================================================import

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

=========================================================map

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

_________________________________________________________________

相關文章
相關標籤/搜索