为什么我的keras模型有这么多参数?

时间:2018-07-17 22:35:56

标签: python machine-learning neural-network 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的当前架构。但是,它说它有180万个可训练参数。为什么会这样呢?我以为第一层给出了(32 * 4 = 128个参数),但是接下来如何查找模型其余部分中有多少个参数呢?

我的理解是,由于CNN架构是共享权重,因此它们仅应依赖于过滤和最大池化。为什么我会有这么多参数?我应该如何减少数量?

询问如何使用“摘要”查找参数数量。我在问为什么我的模型有这么多参数,以及如何减少这个数量。我不直观地理解为什么该模型应该具有180万个可训练参数。

2 个答案:

答案 0 :(得分:2)

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

  • 第二次转化后,您的形状为function add_thing() block_name = "block_0" block = { } block[block_name] = { } block[block_name]["hash"] = "" block[block_name]["index"] = "" block[block_name]["hash"] = "this is a test hash" block[block_name]["index"] = 10 return block end chain = { } table.insert(chain, add_thing()) require 'pl.pretty'.dump(chain)
  • 然后,池化将为您提供(None, 358,718,32)附近的东西
  • 然后(None, 120, 240, 32)层给您Flatten的{​​{1}} !!!!

这就是参数太多的原因!

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

您需要更多的转换+缓冲池以逐渐减小大小,然后再将大量的图像投入密集层。

答案 1 :(得分:0)

一种大幅降低这些参数的好方法是添加: subsample=(2, 2)(小心会降低图像/数据的分辨率)在该Flatten层之上的所有卷积层中, 如果子样本无效,则为stride=(2, 2)