Keras:误解了 Conv2D 的参数“过滤器”?

数据挖掘 喀拉斯 核心
2022-03-09 16:38:26

来自https://keras.io/layers/convolutional/ (Conv2D):

keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid',
                    data_format=None, dilation_rate=(1, 1), activation=None,
                    use_bias=True, kernel_initializer='glorot_uniform', 
                    bias_initializer='zeros', kernel_regularizer=None, 
                    bias_regularizer=None, activity_regularizer=None, 
                    kernel_constraint=None, bias_constraint=None)

filters:整数,输出空间的维度(即卷积中输出滤波器的数量)。

既然我们指定了内核的大小和输入,为什么可以指示特征映射的数量(内核和输入之间的标量积的结果)?

事实上,如果我们知道内核的大小(宽度和高度)和输入的大小(宽度和高度),那么我们就知道特征图的数量。

1个回答

filters是我们选择用于卷积层学习的kernels的数量。feature detectors最后,我们得到的特征图的数量等于我们在这里声明的过滤器的数量。

现在,这些特征检测器是什么?这些矩阵通常比输入图像小(小得多)。是偶尔3b是的3,5b是的5或者像里面的那个Alexnet 7b是的7.

在 中convolution layer,使用这些过滤器中的每一个进行卷积操作,每次我们取一个过滤器和我们的输入图像,然后我们将过滤器放在输入图像的左上角并乘以每个匹配的单元格,然后我们将总结结果并将其放入输出 ( feature map)矩阵的第一个单元格中。然后我们在图像上移动这个过滤器并做同样的事情,......直到我们填充整个feature mapstride定义我们在图像中移动多少个单元格)。一旦我们有了feature map在输入图像上应用第一个过滤器的结果的第一个过滤器,我们就采用另一个过滤器并执行相同的操作,依此类推。

显然,输出的特征图比输入的要小,随着输入大小减少的数量取决于我们选择的步幅,此外,我们在我们的feature map(也称为卷积/卷积图)中有一种聚合特征

既然我们指定了内核的大小和输入,为什么可以指示特征映射的数量(内核和输入之间的标量积的结果)?

事实上,如果我们知道内核的大小(宽度和高度)和输入的大小(宽度和高度),那么我们就知道特征图的数量。

问题是,如果我们只知道输入大小和内核大小,我们不知道步幅,那么将步幅设置为 2 或 1 或其他任何值都会给我们带来不同的结果。如果你假设你的步幅是一个特定的数字,那么你就会知道应该使用多少个过滤器。