【问题标题】:Keras model structure questionsKeras模型结构题
【发布时间】:2016-12-12 04:29:50
【问题描述】:

我正在关注 this tutorial 使用 Keras 训练基本的卷积网络。不过,我发现一些事情令人困惑,而且 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. 本教程将第一层描述为“输入层”。但是,第一行包含一个Convolution2D 函数和一个input_shape。我是否正确假设这实际上是第一个 hidden 层(卷积层),而不仅仅是 input 层?原因是我们不需要单独的 model.add() 语句来仅用于输入?
  2. Convolution2D() 函数中,我们使用了32 个过滤器,每个过滤器为3x3 像素。在我的理解中,过滤器是一小块“扫描”图像的像素。那么对于 28x28 的图像,我们不需要 676 个滤镜(26*26,因为每个滤镜都是 3x3)吗?这里的32 是什么意思?
  3. 最后一行是 Dropout 层。据我了解,Dropout 是一种正则化技术,适用于整个网络。那么这里的Dropout(0.25) 是否只对前一层应用了 25% 的 dropout?还是它适用于它之前的所有层?

谢谢。

【问题讨论】:

  • 我不会发布答案,因为它会不完整,所以:1. 是的,“输入层”实际上只是一个被动层,它只是将输入数据传递给第一个隐藏层 3。它仅适用于前一层(实际上是当前层,直到您在顺序模型中添加另一个层),但并非所有层都可以有 dropout。卷积层不使用其他正则化技术。 Dense 有 dropout,Recurrent 也有,但语法不同(关键字参数)。

标签: python python-3.x neural-network keras


【解决方案1】:
  1. 无论何时调用 model.fit(),都会传递 28 * 28 的图像。这就是模型的输入。 在该输入之上,我们进行卷积以生成特征图。

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

  3. 这会将概率 0.25 的 dropout 应用到句子前面的层。

【讨论】:

  • 谢谢你的回答,但是关于3,其他人告诉我dropout适用于上一层,而不是下一层?所以在这种情况下,0.25 的 dropout 适用于 MaxPool 层,对吗?
  • 你是对的。我误解了源代码。让我更正答案
猜你喜欢
  • 2020-12-18
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多