輸入以下的程式碼塊
from keras.models import Sequential
from keras.layers import Conv2D
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=2, strides=2, padding='valid',
activation='relu', input_shape=(200, 200, 1)))
model.summary()
我們不會訓練該 CNN;相反,我們將使用該可執行檔案根據所提供的引數研究卷積層的維度如何變化。
執行 python path/to/conv-dims.py 並檢視輸出。應該如下所示:
公式:卷積層中的引數數量
卷積層中的引數數量取決於 filters、kernel_size 和 input_shape 的值。我們定義幾個變數:
- K - 卷積層中的過濾器數量
- F - 卷積過濾器的高度和寬度
- D_in - 上一層級的深度
注意:K = filters,F = kernel_size。類似地,D_in 是 input_shape 元組中的最後一個值。
因為每個過濾器有 F*F*D_in 個權重,卷積層由 K 個過濾器組成,因此卷積層中的權重總數是 K*F*F*D_in。因為每個過濾器有 1 個偏差項,卷積層有 K 個偏差。因此,卷積層中的 引數數量是 K*F*F*D_in + K。
公式:卷積層的形狀
卷積層的形狀取決於 kernel_size、input_shape、padding 和 stride 的值。我們定義幾個變數:
- K - 卷積層中的過濾器數量
- F - 卷積過濾器的高度和寬度
- H_in - 上一層級的高度
- W_in - 上一層級的寬度
注意:K = filters、F = kernel_size,以及S = stride。類似地,H_in 和 W_in 分別是 input_shape 元組的第一個和第二個值。
卷積層的 深度始終為過濾器數量 K。
如果 padding = 'same',那麼卷積層的空間維度如下:
- height = ceil(float(H_in) / float(S))
- width = ceil(float(W_in) / float(S))
如果 padding = 'valid',那麼卷積層的空間維度如下:
- height = ceil(float(H_in - F + 1) / float(S))
- width = ceil(float(W_in - F + 1) / float(S))