gpt4 book ai didi

machine-learning - 在 CNN 中 Dropout 之前堆叠多个 Conv2D 层背后的直觉

转载 作者:行者123 更新时间:2023-11-30 08:30:16 24 4
gpt4 key购买 nike

背景:

标记 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 结构(复制如下),它比上面的结构效果更好,因为它实现了更好的准确率、更低的错误率,并且在过度拟合训练数据之前需要更多的 epoch 时间.

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 结构的更好性能背后有什么直觉或解释吗?是什么使得在最大池化和 dropout 之前堆叠 2 个 Conv2D 层比仅使用 1 个 Conv2D 层更好?或者还有其他因素对第二个模型的结果有贡献吗?

感谢大家的时间和帮助。

最佳答案

这两种方法之间的主要区别在于,后者(2 次转换)在表达非线性变换方面具有更大的灵 active ,而不会丢失信息。 Maxpool 从信号中删除信息,dropout 强制分布式表示,因此两者都有效地使信息传播变得更加困难。如果对于给定的问题,必须对原始数据应用高度非线性变换,那么堆叠多个卷积(使用 relu)将使学习变得更容易,就是这样。另请注意,您正在将具有 3 个最大池化的模型与仅具有 2 个最大池化的模型进行比较,因此第二个模型可能会丢失较少的信息。另一件事是它最后有更大的全连接位,而第一个是很小的(64 个神经元 + 0.5 dropout 意味着你实际上最多有 32 个神经元处于事件状态,这是一个很小的层!)。总结一下:

  1. 这些架构在很多方面都有所不同,而不仅仅是堆叠卷积网络。
  2. 堆叠卷积网络通常会减少处理过程中丢失的信息;例如,参见“全卷积”架构。

关于machine-learning - 在 CNN 中 Dropout 之前堆叠多个 Conv2D 层背后的直觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com