我意识到以下问题可能会按照“关于实验和使用经验”的原则获得回应,但无论如何我都会提出问题,因为我认为了解我应该从什么开始应该很有用。

在Keras的Conv2D卷积层中,有一个名为filters的参数,我将其理解为“在由kernel_size参数定义的大小的图像上卷积的滤镜窗口数”。即Conv2D(filters=32, kernel_size=(3,3)..)表示将在整个图像上扫描大小为3x3的32个窗口。

我的问题是:如果您要创建一个全新的神经网络来解决图像分类/识别问题,而又不利用预先训练的神经网络(因此从头开始),那么通常您会从哪个filters值开始与您的第一个卷积层?有经验法则吗?这只是字面上的实验答案吗?

假设我希望一个全新的模型能够在不利用ResNet50InceptionV3 imagenet模型的情况下识别图像中是否有狗,而我将使用尺寸为4160x3120的彩色图像缩小到(cc,168,3)的input_shape,我的第一个Conv2D层应该是什么样?

例如。此示例代码是否是解决我的问题的良好起点:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), activation="relu", input_shape=(224,168,3), data_format="channels_last"))
model.add(Conv2D(64, kernel_size=(3,3), activation="relu"))
#additional model design code


32是一个好的起点吗?我应该缩小一点吗?将滤镜大小从Conv2D层增加到Conv2D层是否是解决新问题的合适方法?

完全理解这是一个固有的复杂主题,没有“快速致富”的方法,但我只是想对这个主题有更好的了解。

最佳答案

16或32很好。

前几层中的过滤器通常不太抽象,并且通常模拟边缘检测器,斑点检测器等。您通常不希望将过多的过滤器应用于输入层,因为从原始输入层只能提取太多信息。如果添加太多,大多数过滤器将是多余的。您可以通过修剪(减少过滤器数量,直到性能指标下降)进行检查

内核大小决定了要影响卷积输出(内核的“接收场”)的图像数量。可以看出,较小的内核通常要比较大的内核好(即使用3x3而不是5x5、7x7)。

初始架构将这些决策权从建模人员的手中夺走,因为它将不同内核大小的滤波器组合在一起,并让模型学习最佳的滤波器。

作为参考,我建议您在youtube上学习斯坦福大学的CS231n课程以了解所有内容:https://www.youtube.com/playlist?list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk

关于python - 选择Conv2D过滤器值以开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52447345/

10-11 08:34