![](/img/trans.png)
[英]Degenerate solution: Why does my model have so many free scalar parameters
[英]Why does my keras model have so many parameters?
model = ke.Sequential()
model.add(Convolution2D(32,kernel_size=(2,2),activation='relu',input_shape=(360,720,1)))
model.add(Convolution2D(32, 2, 2, activation='relu'))
model.add(MaxPooling2D(pool_size = (3,3)))
model.add(Dropout(.3))
model.add(Flatten())
model.add(Dense(2, activation='softmax'))
以上是我的CNN的当前架构。 但是,它说它有180万个可训练参数。 为什么会这样呢? 我以为第一层给出了(32 * 4 = 128个参数),但是接下来如何查找模型其余部分中有多少个参数呢?
我的理解是,由于CNN体系结构是共享权重,因此它们仅应依赖于过滤和最大池化。 为什么我会有这么多参数? 我应该如何减少数量?
我不是在问如何使用“摘要”查找参数的数量。 我在问为什么我的模型有这么多参数,以及如何减少这个数量。 我不直观地理解为什么该模型应具有180万个可训练参数。
使用摘要确认以下内容(相信我,会有答案:D):
(None, 358,718,32)
(None, 120, 240, 32)
Flatten
层给了您(None, 120*240*32)
(None, 921600)
!!!! 这就是参数太多的原因!
对于每个输入,密集层将具有2个权重,外加2个偏差,仅对于密集层而言,共有1843202个参数。
您需要更多的Convs + Poolings才能逐渐减小大小,然后再将大量内容投入Dense层。
大幅降低这些参数的一个好方法是在该Flatten层上方的所有卷积层中添加: subsample=(2, 2)
(小心会降低图像/数据的分辨率),如果子采样不起作用,则stride=(2, 2)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.