我刚刚开始我的 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.
Joe
事实上 - 你的问题没有一个好的答案。大多数架构通常都是在多次实验中精心设计和微调的。我可以与您分享一些在设计自己的架构时应该应用的经验法则:
Avoid a 维度崩溃在第一层。假设您的输入过滤器有一个(n, n)
空间形状为RGB
图像。在这种情况下,最好将过滤器编号设置为大于n * n * 3
因为这是单个过滤器输入的维度。如果您设置较小的数字 - 您可能会因为初始化而丢失信息维度而丢失有关图像的许多有用信息。当然 - 这不是一般规则 - 例如对于图像复杂性较低的纹理识别 - 少量过滤器实际上可能会有所帮助。
更多地考虑体积而不是过滤器数量- 设置过滤器数量时,重要的是要考虑体积变化,而不是连续层之间过滤器数量的变化。例如。在VGG
- 即使在池化层之后过滤器的数量加倍 - 实际的特征图体积减少了 2 倍,因为池化将特征图减少了 2 倍4
。通常,将卷大小减少 3 以上应该被视为不好的做法。大多数现代架构使用 1 到 2 范围内的体积下降系数。不过,这不是一般规则。如果层次结构较窄,则成交量下降的较大值实际上可能会有所帮助。
Avoid 瓶颈。正如人们可能在这一里程碑中读到的那样paper https://arxiv.org/abs/1512.00567瓶颈可能会严重损害您的训练过程。当音量下降太严重时会发生这种情况。当然 - 这仍然可能实现 - 但是你应该使用智能下采样,例如使用在Inception v>2
检查 1x1 卷积- 人们相信过滤器的激活是高度相关的。人们可以通过使用来利用它1x1卷积 - 即滤波器大小为 1 的卷积。这使得例如音量下降而不是pooling
或智能下采样(参见示例here https://arxiv.org/pdf/1612.08242.pdf)。你可以例如再构建两倍的过滤器,然后通过使用 1x1 卷积作为连续层来削减其中的 25%。
正如你所看到的。没有简单的方法来选择过滤器的数量。除了上面的提示之外,我想与您分享我最喜欢的关于过滤器数量的健全性检查之一。只需 2 个简单步骤:
- 尝试通过正则化对 500 个随机图像进行过度拟合。
- 尝试在不进行任何正则化的情况下对整个数据集进行过度拟合。
通常 - 如果过滤器的数量太少(一般情况下) - 这两个测试会告诉你这一点。如果 - 在你的训练过程中 - 通过正则化 - 你的网络严重过度拟合 - 这清楚地表明你的网络有太多的过滤器。
Cheers.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)