【发布时间】: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))
我的问题:
- 本教程将第一层描述为“输入层”。但是,第一行包含一个
Convolution2D函数和一个input_shape。我是否正确假设这实际上是第一个 hidden 层(卷积层),而不仅仅是 input 层?原因是我们不需要单独的model.add()语句来仅用于输入? - 在
Convolution2D()函数中,我们使用了32 个过滤器,每个过滤器为3x3 像素。在我的理解中,过滤器是一小块“扫描”图像的像素。那么对于 28x28 的图像,我们不需要 676 个滤镜(26*26,因为每个滤镜都是 3x3)吗?这里的32是什么意思? - 最后一行是 Dropout 层。据我了解,Dropout 是一种正则化技术,适用于整个网络。那么这里的
Dropout(0.25)是否只对前一层应用了 25% 的 dropout?还是它适用于它之前的所有层?
谢谢。
【问题讨论】:
-
我不会发布答案,因为它会不完整,所以:1. 是的,“输入层”实际上只是一个被动层,它只是将输入数据传递给第一个隐藏层 3。它仅适用于前一层(实际上是当前层,直到您在顺序模型中添加另一个层),但并非所有层都可以有 dropout。卷积层不使用其他正则化技术。 Dense 有 dropout,Recurrent 也有,但语法不同(关键字参数)。
标签: python python-3.x neural-network keras