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))
我的问题:
- 教程将第一层描述为"input layer"。但是,第一行包含一个
Convolution2D
函数,带有一个 input_shape
。我是否正确地假设这实际上是第一个 hidden 层(卷积层),而不仅仅是 input 层?原因是我们不需要单独的 model.add()
语句来输入?
- 在
Convolution2D()
函数中,我们使用了 32 个过滤器,每个过滤器为 3x3 像素。在我的理解中,滤镜是图像中 "scans" 的一小块像素。那么对于 28x28 的图像,我们不需要 676 个过滤器(26*26,因为每个过滤器都是 3x3)吗?这里的32
是什么意思?
- 最后一行是Dropout层。据我了解,Dropout是一种正则化技术,它适用于整个网络。那么这里的
Dropout(0.25)
是不是只对上一层应用了25%的dropout呢?还是它适用于它之前的所有图层?
谢谢。
每当您调用 model.fit() 时,您传递的是 28 * 28 图像。这就是模型的输入。
在该输入之上,我们进行卷积以生成特征图。
卷积就是矩阵乘法。所以第一层单个filter的输出是26*26的矩阵。我们有这样的 32 个矩阵。这就是 32 的意思。检查这个以获得进一步的解释。 https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
这会将概率为 0.25 的 dropout 应用于句子之前的层。
我正在关注 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))
我的问题:
- 教程将第一层描述为"input layer"。但是,第一行包含一个
Convolution2D
函数,带有一个input_shape
。我是否正确地假设这实际上是第一个 hidden 层(卷积层),而不仅仅是 input 层?原因是我们不需要单独的model.add()
语句来输入? - 在
Convolution2D()
函数中,我们使用了 32 个过滤器,每个过滤器为 3x3 像素。在我的理解中,滤镜是图像中 "scans" 的一小块像素。那么对于 28x28 的图像,我们不需要 676 个过滤器(26*26,因为每个过滤器都是 3x3)吗?这里的32
是什么意思? - 最后一行是Dropout层。据我了解,Dropout是一种正则化技术,它适用于整个网络。那么这里的
Dropout(0.25)
是不是只对上一层应用了25%的dropout呢?还是它适用于它之前的所有图层?
谢谢。
每当您调用 model.fit() 时,您传递的是 28 * 28 图像。这就是模型的输入。 在该输入之上,我们进行卷积以生成特征图。
卷积就是矩阵乘法。所以第一层单个filter的输出是26*26的矩阵。我们有这样的 32 个矩阵。这就是 32 的意思。检查这个以获得进一步的解释。 https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
这会将概率为 0.25 的 dropout 应用于句子之前的层。