CNN中的过滤器数量是多少?

What is the number of filter in CNN?

我目前正在看theano的API,

theano.tensor.nnet.conv2d(input, filters, input_shape=None, filter_shape=None, border_mode='valid', subsample=(1, 1), filter_flip=True, image_shape=None, **kwargs)

其中 filter_shape(num_filter, num_channel, height, width) 的元组,我对此感到困惑,因为在滑动过滤器 window 时,过滤器的数量不是由步幅决定的吗图片?我怎样才能像这样指定过滤器编号?如果是通过参数stride(如果有的话)来计算的话,我觉得比较合理

另外,我对feature map这个词也很困惑,是每层的神经元吗?批量大小如何?它们如何相关?

过滤器的数量就是神经元的数量,因为每个神经元对层的输入执行不同的卷积(更准确地说,神经元的输入权重形成卷积核)。

特征图是应用过滤器的结果(因此,您拥有与过滤器一样多的特征图),其大小是 window/kernel 过滤器大小和步幅的结果。

下图是我能找到的从高层次解释这个概念的最佳图片: 请注意,将 2 个不同的卷积滤波器应用于输入图像,从而产生 2 个不同的特征图(滤波器的输出)。每个特征图的每个像素都是卷积层的输出。

例如,如果您有 28x28 的输入图像和一个包含 20 个 7x7 过滤器且步幅为 1 的卷积层,您将在该层的输出端获得 20 个 22x22 的特征图。请注意,这是作为宽度 = 高度 = 22 和深度 = num_channels = 20 的体积呈现给下一层的。您可以使用相同的表示在 RGB 图像(例如来自 CIFAR10 数据集的图像)上训练 CNN ,这将是 32x32x3 体积(卷积仅应用于 2 个空间维度)。

编辑:评论中似乎有些混乱,我想澄清一下。首先,没有神经元。神经元只是神经网络中的一个比喻。也就是说,"how many neurons are there in a convolutional layer" 无法客观地回答,而是相对于您对该层执行的计算的看法。在我看来,过滤器是单个神经元,它 扫过图像 ,为每个位置提供 不同的激活 。在我看来,整个特征图是由多个位置的单个 neuron/filter 生成的。评论员似乎有另一种观点,与我的一样有效。他们将每个过滤器视为一组用于卷积运算的权重,以及图像中每个参与位置的一个神经元,所有这些都共享由过滤器定义的同一组权重。请注意,这两个视图在功能上(甚至在根本上)是相同的,因为它们使用相同的参数、计算并产生相同的结果。因此,这不是问题。

过滤器的数量是一个可以调整的超参数。卷积层中神经元的数量等于该层输出的大小。对于图像,它是特征图的大小。

关于过滤器的最佳数量没有正确答案。这在很大程度上取决于您的(图像)数据的类型和复杂性。随着时间的推移反复使用相似类型的数据集,从经验中学习了适当数量的特征。通常,您想要在图像中捕获(并且可能可用)的特征越多,CNN 中所需的过滤器数量就越多。

首先您需要了解过滤器的实际作用。

每一层过滤器都是为了捕捉模式。例如,第一层过滤器捕获边缘、角、点等图案。后续层 将这些图案组合成更大的图案

卷积神经网络(通常)是用于 image/object 识别的监督方法。这意味着您需要使用一组标记图像来训练 CNN:这允许优化其卷积滤波器的权重,从而学习滤波器自身的形状,以最大限度地减少错误。 一旦你决定了过滤器的大小,过滤器的初始化对于“指导”学习很重要,你确实可以将它们初始化为随机值,然后让学习完成工作。

记住:

没有确定的规则,这取决于所考虑的情况。例如,要对 MNIST 数据库中的数字图像(28 x 28 像素黑白图像)进行分类,一个不错的选择是使用 20 个大小为 9 x 9 的过滤器(参考:P. Kim 的 MATLAB Deep Learning)。这个过滤器的数量将等于在第一个卷积层中获得的特征图的数量。其他类型的图像可能需要更多或更少的特征图,具体取决于图像的结构。

大于 0 且小于每个过滤器中的参数数量。例如,如果您有一个 5x5 滤镜、1 个颜色通道(因此,5x5x1),那么该层中的滤镜应该少于 25 个。原因是,如果您有 25 个或更多滤镜,则每个像素至少有 1 个滤镜。过滤器组应该对输入提供一些有损压缩,如果过滤器的数量与每个过滤器的参数一样多,那么它不会丢失任何数据,它只会大量过度拟合。