如何确定Keras Conv2D函数中的“过滤器”参数

时间:2018-01-13 19:07:05

标签: machine-learning neural-network keras conv-neural-network convolution

我刚刚开始我的ML之旅并做了一些教程。有一点不清楚(对我来说)是如何为Keras Conv2D确定'过滤器'参数。

我读过的大多数资源都只是将参数设置为32而没有解释。这只是一个经验法则还是输入图像的尺寸起作用?例如,CIFAR-10中的图像是32x32

具体做法是:

model = Sequential()
filters = 32
model.add(Conv2D(filters, (3, 3), padding='same', input_shape=x_train.shape[1:]))

model.add(Activation('relu'))
model.add(Conv2D(filters, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

下一层的过滤器参数为filter * 2或64.再次,这是如何计算的?

的Tx。

2 个答案:

答案 0 :(得分:15)

实际上 - 你的问题没有一个好的答案。大多数架构通常都经过精心设计,并在许多实验中进行了微调。我可以与你分享一些在设计自己的架构时应该应用的拇指规则:

  1. 避免在第一层中使用尺寸折叠假设您的输入过滤器具有(n, n) RGB空间形状图片。在这种情况下,最好将过滤器编号设置为大于n * n * 3,因为这是单个过滤器输入的维数。如果设置较小的数字 - 您可能会遇到这样一个事实,即由于初始化而丢失了信息尺寸,许多有用的图像信息都会丢失。当然 - 这不是一般规则 - 例如对于纹理识别,图像复杂度较低 - 少数过滤器实际上可能有所帮助。

  2. 更多地考虑音量而不是过滤器数量 - 设置过滤器数量时,重要的是要考虑音量变化而不是连续层之间过滤器数量的变化。例如。在VGG中 - 即使在汇集图层后过滤器的数量增加一倍 - 实际的要素图卷也减少了2倍,因为汇集了要素4的因素。通常将音量减小3以上应被视为不良做法。大多数现代架构使用的音量下降因子在1到2之间。仍然 - 这不是一般规则 - 例如在层次结构较窄的情况下 - 体积下降的较大值实际上可能有所帮助。

  3. 避免瓶颈 。正如人们可能会读到这个里程碑paper瓶颈可能会严重损害您的培训过程。当音量下降太严重时会发生这种情况。当然 - 这仍然可以实现 - 但是你应该使用智能下采样,例如使用在Inception v>2

  4. 检查1x1卷积 - 相信过滤器激活是高度相关的。人们可以通过使用 1x1 卷积来利用它 - 即使用滤波器大小为1的卷积。这使得例如音量下降而不是pooling或智能下采样(参见示例here)。你可以,例如通过使用1x1转换作为连续图层,构建两次以上的过滤器,然后减少25%的过滤器。

  5. 你可能会看到。没有简单的方法可以选择过滤器的数量。除了上面的提示,我想与您分享我最喜欢的一个关于过滤器数量的完整性检查。它需要2个简单的步骤:

    1. 尝试使用正规化过度拟合500张随机图像。
    2. 尝试在整个数据集中过度拟合而不进行任何正则化。
    3. 通常 - 如果过滤器的数量太少(通常) - 这两个测试将向您显示。如果 - 在您的培训过程中 - 通过正规化 - 您的网络严重过度 - 这清楚地表明您的网络有太多的过滤器。

      干杯。

答案 1 :(得分:1)

根据任务的复杂性选择过滤器数量。更复杂的任务需要更多过滤器。通常,每个图层之后的过滤器数量会增加(例如128 -> 256 -> 512)。第一层(具有较少数量的滤镜)捕捉到图像的一些简单特征(边缘,色调等),而下一层试图基于简单的特征获得更复杂的特征。

斯坦福大学有nice course给你直觉和理解CNN。