Keras模型结构问题

时间:2016-12-12 04:29:51

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

我正在关注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。假设这实际上是第一个隐藏层(卷积层),而不仅仅是输入层,我是否正确?原因是我们不需要为输入单独的model.add()语句?
  2. Convolution2D()函数中,我们使用32个滤镜,每个滤镜为3x3像素。根据我的理解,滤镜是一小块像素,可在图像上“扫描”。因此对于28x28图像,我们不需要676个滤波器(26 * 26,因为每个滤波器是3x3)?这里32是什么意思?
  3. 最后一行是Dropout图层。根据我的理解,Dropout是一种正规化技术,它适用于整个网络。那么Dropout(0.25)这里仅对前一层应用了25%的辍学吗?或者它适用于它之前的所有层?
  4. 感谢。

1 个答案:

答案 0 :(得分:0)

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

  2. 卷积意味着矩阵乘法。因此第一层中单个滤波器的输出是26 * 26矩阵。我们有32个矩阵。这就是32意味着什么。请检查以获得进一步说明。 https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

  3. 这会将概率为0.25的丢失应用于句子前面的层。