首页 > 解决方案 > 为什么我的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 万个可训练参数。

标签: pythonmachine-learningneural-networkkeras

解决方案


使用摘要确认以下内容(相信我,会有答案:D):

  • 在第二个 conv 之后,你有一个像(None, 358,718,32)
  • 池然后给你一些非常接近的东西(None, 120, 240, 32)
  • Flatten图层给了你(None, 120*240*32)(None, 921600)!!!!

这就是参数这么多的原因!

密集层将有每个输入的 2 个权重,加上 2 个偏差,总共 1843202 个参数仅用于密集层。

您需要更多的 Convs + Poolings 来逐渐减小大小,然后再将大量数据投入 Dense 层。


推荐阅读