機器學習工程師 - Udacity 卷積層的維度計算
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()
注意卷積層中的引數數量是如何變化的。對應的是輸出內容中的 Param # 下的值。在上圖中,卷積層具有 80 個引數。
同時注意卷積層的形狀是如何變化的。對應的是輸出內容中的 Output Shape 下的值。在上圖中,None 對應的是批次大小,卷積層的高度為 100,寬度為 100,深度為 16。
公式:卷積層中的引數數量
卷積層中的引數數量取決於 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))