背景:
标记TensorFlow,因为Keras运行在其之上,这更是一个通用的深度学习问题。
我一直在处理Kaggle的数字识别问题,并使用Keras来训练CNN模型用于该任务。下面的模型是我在比赛中使用的原始CNN结构,表现还可以。
def build_model1(): model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), padding="Same" activation="relu", input_shape=[28, 28, 1])) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Dropout(0.25)) model.add(layers.Conv2D(64, (3, 3), padding="Same", activation="relu")) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Dropout(0.25)) model.add(layers.Conv2D(64, (3, 3), padding="Same", activation="relu")) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Dropout(0.25)) model.add(layers.Flatten()) model.add(layers.Dense(64, activation="relu")) model.add(layers.Dropout(0.5)) model.add(layers.Dense(10, activation="softmax")) return model
然后,我阅读了Kaggle上其他人的笔记本,并借鉴了另一个CNN结构(如下所示),这个结构的表现比上面的要好得多,因为它达到了更高的准确率、更低的错误率,并且在过拟合训练数据之前经过了更多的轮次。
def build_model2(): model = models.Sequential() model.add(layers.Conv2D(32, (5, 5),padding ='Same', activation='relu', input_shape = (28, 28, 1))) model.add(layers.Conv2D(32, (5, 5),padding = 'Same', activation ='relu')) model.add(layers.MaxPool2D((2, 2))) model.add(layers.Dropout(0.25)) model.add(layers.Conv2D(64,(3, 3),padding = 'Same', activation ='relu')) model.add(layers.Conv2D(64, (3, 3),padding = 'Same', activation ='relu')) model.add(layers.MaxPool2D(pool_size=(2, 2), strides=(2, 2))) model.add(layers.Dropout(0.25)) model.add(layers.Flatten()) model.add(layers.Dense(256, activation = "relu")) model.add(layers.Dropout(0.5)) model.add(layers.Dense(10, activation = "softmax")) return model
问题:
第二个CNN结构表现更好的背后有什么直觉或解释吗?是什么使得堆叠2个Conv2D层比在最大池化和Dropout之前只使用1个Conv2D层更好?还是说有其他因素促成了第二个模型的结果?
感谢你们的时间和帮助。
回答:
这两种方法的主要区别在于后者(2个卷积层)在不丢失信息的情况下,能够更灵活地表达非线性变换。最大池化会从信号中移除信息,Dropout强制分布式表示,因此两者都有效地增加了信息传播的难度。如果对于给定的问题,需要对原始数据应用高度非线性的变换,堆叠多个卷积层(带有ReLU)会使学习变得更容易,就是这样。还要注意,你是在比较一个有3个最大池化的模型和一个只有2个的模型,因此后者可能会丢失更少的信息。另一个区别是后者的全连接部分要大得多,而第一个模型的全连接部分很小(64个神经元加上0.5的Dropout意味着你实际上最多只有32个神经元处于激活状态,这是一个很小的层!)。总结如下:
- 这些架构在许多方面都有所不同,而不仅仅是堆叠卷积网络。
- 堆叠卷积网络通常会导致处理过程中丢失的信息更少;例如,请参阅“全卷积”架构。