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万个可训练参数。
答案 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)
。