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

Posted

技术标签:

【中文标题】CNN中的过滤器数量是多少?【英文标题】:What is the number of filter in CNN? 【发布时间】:2016-07-14 14:27:21 【问题描述】:

我目前正在看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) 的元组,我对此感到困惑,因为在图像上滑动过滤器窗口时,这不是由步幅决定的过滤器数量吗?我怎样才能像这样指定过滤器编号?如果按参数stride(如果有的话)计算,对我来说是合理的。

另外,我也对特征图这个术语感到困惑,它是每一层的神经元吗?批量大小如何?它们是如何相关的?

【问题讨论】:

"过滤器的数量不是任意的。它们可以凭直觉或凭经验选择。" Link 【参考方案1】:

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

特征图是应用过滤器的结果(因此,特征图与过滤器一样多),其大小是过滤器的窗口/内核大小和步幅的结果。

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

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

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

【讨论】:

非常感谢!你是救生员! 关于选择过滤器/内核数的这句话怎么样:“实际上,为了均衡每一层的计算,特征数和像素位置数的乘积通常被选择为大致恒定跨层”在deeplearning.net/tutorial/lenet.html 中引用。可以举个例子吗? 我认为 OP 在询问您的 20 个过滤器来自哪里。我的意思是为什么是 20? 我也有这个疑问。为什么是 20? 虽然这个高级解释是正确的,但我必须澄清过滤器的数量!= 神经元本身的数量。一组神经元,每个都看到前一个特征图的一部分(= 第一层神经元的图像),每个都应用相同的权重形成整个“过滤器”。同意,在编码时,您很少需要了解此级别的结构,但这并不会改变您的第一句话是错误的事实。不过很好的解释!【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

记住:

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

【讨论】:

以上是关于CNN中的过滤器数量是多少?的主要内容,如果未能解决你的问题,请参考以下文章

CNN 中每个卷积层后生成的特征图数量

在 PyTorch 中创建具有多个通道的简单 1D CNN

Keras CNN 参数太少

CNN 的过滤器是如何学习的?

kettle过滤生成随机数改变开始复制数量

如何通过反向传播训练卷积神经网络中的过滤器?