python - 为什么我的keras模型有这么多参数?
问题描述
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 的架构。但是,它说它有 1.8m 的可训练参数。为什么会这样?我认为第一层给出了(32*4 = 128 个参数),但是我如何找到模型的其余部分有多少参数?
我的理解是 CNN 架构应该只依赖于过滤和最大池化,因为它们是共享权重。那为什么我有这么多参数呢?我应该如何减少数量?
我不是在问如何使用“摘要”找到参数的数量。我在问为什么我的模型有这么多参数以及如何减少这个数字。我不能直观地理解为什么这个模型应该有 180 万个可训练参数。
解决方案
使用摘要确认以下内容(相信我,会有答案:D):
- 在第二个 conv 之后,你有一个像
(None, 358,718,32)
- 池然后给你一些非常接近的东西
(None, 120, 240, 32)
- 而
Flatten
图层给了你(None, 120*240*32)
是(None, 921600)
!!!!
这就是参数这么多的原因!
密集层将有每个输入的 2 个权重,加上 2 个偏差,总共 1843202 个参数仅用于密集层。
您需要更多的 Convs + Poolings 来逐渐减小大小,然后再将大量数据投入 Dense 层。