我很难理解 Keras CNN 模型中层的输出形状和参数数量。
让我们以这个玩具为例:
model = Sequential()
model.add(Conv1D(7, kernel_size=40, activation="relu", input_shape=(60, 1)))
model.add(Conv1D(10, kernel_size=16, activation="relu"))
model.add(MaxPooling1D(pool_size=3))
model.summary()
输出是:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_17 (Conv1D) (None, 21, 7) 287
_________________________________________________________________
conv1d_18 (Conv1D) (None, 6, 10) 1130
_________________________________________________________________
max_pooling1d_11 (MaxPooling (None, 2, 10) 0
=================================================================
Total params: 1,417
Trainable params: 1,417
Non-trainable params: 0
_________________________________________________________________
对于第一Conv1D
层,有 7 个输出大小为 (60 - 40 + 1) = 21 的过滤器。考虑到偏差,参数数量为 (40 + 1) * 7 = 287。所以,我可以接受。
Conv1D
但是第二层会在哪个维度上运行呢?我猜输出滤波器的大小是 21 - 16 + 1 = 6,但我不明白通过哪个操作我们可以将最后一个维度从 7 变为 10。我也不明白如何计算参数数量。
最后,我不了解MaxPooling1D
图层的输出形状,因为我希望输出大小为 6 - 3 + 1 = 4 而不是 2。它是如何计算的?