在连续添加相同的图层之前有一个好处,如下所示:
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
而不是像下面那样继续增加过滤器大小:
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
添加相同的图层是否很常见,因为继续增加过滤器数量会增加成本?
当我连续使用相同的图层时,我获得了更高的准确性,但是当我浏览示例和书籍时,我很少碰到作者添加相同的图层,并且只是好奇为什么。
答案 0 :(得分:1)
问题很好,但是答案取决于情况。
首先,应用卷积时,了解图像的尺寸非常重要。几篇论文表明,由于早期层捕获边缘/颜色/形状或类似信息https://blog.keras.io/how-convolutional-neural-networks-see-the-world.html,因此在早期层中不使用大量过滤器。因此,在第一层中使用128个过滤器代替32个过滤器可能不会很好地提高整体精度。
作为先前观察的结果,过滤器的数量随着神经网络的深入而增加,因为可以捕获更多特定于任务的信息。多数公认的图像分类架构都以卷积层中滤镜数量的两倍增加。
这在很大程度上取决于数据集,这就是为什么不能做出一般性陈述的原因,尽管前两个观察都已在经验和统计上得到证明。
如果您添加Dropout或BatchNormalization,则可以开始使用卷积,添加/删除图层,查看是否改进,但是我建议您检查已经建立好的网络。
不能保证架构X或Y可以更好地工作。如今,趋势是使用具有跳过连接的体系结构,以确保端到端的梯度流而不会丢失信息。尝试使用ResNet50 / 101(所有变体),Xception,DenseNet,SENetwork。