我刚刚开始我的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 回答
实际上 - 你的问题没有一个好的答案 . 大多数架构通常都经过精心设计,并在许多实验中进行了微调 . 我可以与您分享一些在设计自己的架构时应该应用的拇指规则:
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个随机图像上进行过度拟合 .
尝试在整个数据集中过度拟合而不进行任何正则化 .
通常 - 如果过滤器的数量太少(通常) - 这两个测试将向您显示 . 如果 - 在您的培训过程中 - 通过正规化 - 您的网络严重过度 - 这清楚地表明您的网络有太多的过滤器 .
干杯 .
根据任务的复杂性选择过滤器数量 . 更复杂的任务需要更多过滤器 . 通常,每个层之后的过滤器数量会增加(例如
128 -> 256 -> 512
) . 第一层(具有较少数量的滤波器)捕获图像的一些简单特征(边缘,色调等),并且下一层试图基于简单的特征获得更复杂的特征 .来自斯坦福大学的nice course给你直觉和对CNN的理解 .