Keras模型结构题

Keras model structure questions

我正在关注 this tutorial 使用 Keras 训练基本的 conv-net。不过,我发现有几件事令人困惑,而且 Keras 文档也没有详细介绍。

让我们看看网络的前几层:

model = Sequential()

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

我的问题:

  1. 教程将第一层描述为"input layer"。但是,第一行包含一个 Convolution2D 函数,带有一个 input_shape。我是否正确地假设这实际上是第一个 hidden 层(卷积层),而不仅仅是 input 层?原因是我们不需要单独的 model.add() 语句来输入?
  2. Convolution2D() 函数中,我们使用了 32 个过滤器,每个过滤器为 3x3 像素。在我的理解中,滤镜是图像中 "scans" 的一小块像素。那么对于 28x28 的图像,我们不需要 676 个过滤器(26*26,因为每个过滤器都是 3x3)吗?这里的32是什么意思?
  3. 最后一行是Dropout层。据我了解,Dropout是一种正则化技术,它适用于整个网络。那么这里的Dropout(0.25)是不是只对上一层应用了25%的dropout呢?还是它适用于它之前的所有图层?

谢谢。

  1. 每当您调用 model.fit() 时,您传递的是 28 * 28 图像。这就是模型的输入。 在该输入之上,我们进行卷积以生成特征图。

  2. 卷积就是矩阵乘法。所以第一层单个filter的输出是26*26的矩阵。我们有这样的 32 个矩阵。这就是 32 的意思。检查这个以获得进一步的解释。 https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

  3. 这会将概率为 0.25 的 dropout 应用于句子之前的层。