首页 文章

如何确定Keras Conv2D函数中的'filter'参数

提问于
浏览
8

我刚刚开始我的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 回答

  • 1

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

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

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

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

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

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

    • 尝试使用正则化在500个随机图像上进行过度拟合 .

    • 尝试在整个数据集中过度拟合而不进行任何正则化 .

    通常 - 如果过滤器的数量太少(通常) - 这两个测试将向您显示 . 如果 - 在您的培训过程中 - 通过正规化 - 您的网络严重过度 - 这清楚地表明您的网络有太多的过滤器 .

    干杯 .

  • 13

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

    来自斯坦福大学的nice course给你直觉和对CNN的理解 .

相关问题