具有Keras的CNN的输出形状和参数



我很难理解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。它是如何计算的?

。。。但我不明白通过哪种运算,我们可以在最后一个维度从7到10。

通过在第一层从1到7的相同操作:卷积滤波器应用于其输入的最后一个轴(即维度(,并在每个应用程序窗口产生一个数字。第二卷积层中有10个滤波器,因此每个窗口将生成10个值,因此最后一个轴的维度将为10(同样的推理也适用于第一卷积层(。

我也不明白参数的数量是如何计算的。

共有10个筛选器。如上所述,过滤器应用于整个最后一个轴。因此,它们必须具有7的宽度(即其输入的最后一个轴大小(。内核大小为16。所以我们有:10*(16*7(+10(每个滤波器1个偏置(=1130。

最后,我不理解MaxPooling1D层的输出形状,因为我希望输出大小是6-3+1=4,而不是2。它是如何计算的?

1D池化层的stride默认等于pool_size。因此,在长度为6的序列上应用,大小为3的池化层将只有2个应用窗口。

注意:您可能还发现这个关于1D conv如何工作的相关答案很有用。

最新更新