Keras CNN模型参数计算

Posted

技术标签:

【中文标题】Keras CNN模型参数计算【英文标题】:Keras CNN model parameters calculation 【发布时间】:2017-11-20 08:53:43 【问题描述】:

我的 cnn 模型是使用 Keras 1.1.1 创建的,它有两个卷积池层和两个密集层,并且在第二个卷积池层和第一个密集层之后添加了 dropout。代码如下:

model = Sequential()
#convolution-pooling layers
model.add(Convolution2D(32, 5, 5, input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(64, 5, 5))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
#dense layers
model.add(Flatten()) 
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add((Dense(2)))
model.add(Activation('softmax'))
#optimizer
sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy',
              optimizer = sgd,
              metrics=['accuracy'])
print model.summary()

模型汇总表如下:

我不清楚第二个卷积层的参数个数(即红色矩形表示的51264)是如何计算的。我认为这个数字是 (5*5 + 1)*64 = 1664,因为卷积核的大小是 5*5,要提取 64 个特征图。

此外,我已经实现了 dropout。为什么参数表没有反映这一点。尽管表中列出了 dropout(层),但似乎给出了没有 dropout 的参数编号。谁能帮我解释一下参数摘要?

【问题讨论】:

关于 dropout:这会在训练期间随机禁用神经元。它们仍然存在于您的模型中,因此不会从模型摘要中的参数数量中扣除。 我认为你是对的 【参考方案1】:

这是一个相当简单的基本概念计算。通过查看您的代码和模型摘要,这是我的步骤。

第一步:计算参数的公式

total_params =(filter_height * filter_width * input_image_channels + 1) * number_of_filters

第 2 步:计算第一层的参数

filter_height = 5,filter_weight = 5,input_image_channels = 1number_of_filters = 32虽然你还没有向我们提供输入 图像通道,但我是根据您的参数值计算出来的。

现在我们将计算第一个卷积层的参数数量。

total_param = (5*5*1 + 1)*32 = 832

第 3 步: 同样我们可以计算第二个 conv 层。 请注意,前一层的过滤器数量会成为当前层输入图像的通道数。

filter_height = 5,filter_weight = 5,input_image_channels = 32number_of_filters = 64

现在我们将计算第二个卷积层的参数数量。

total_param = (5*5*32 + 1)*64 = 51264

【讨论】:

谢谢!这是有道理的 嘿@jingweimo,如果我的回答有道理,请采纳。 @blitu12345 谢谢你的回答,你知道我们为什么加1吗? @Rami 偏见 @Rami,如果是 Convolution2D(32, 5, 5, input_shape=input_shape, bias=False),则不加 1。默认为 true。【参考方案2】:

关于问题的第二部分:

Dropout 层在训练期间随机禁用神经元。它们仍然存在于您的模型中,因此不会从模型摘要中的参数数量中扣除。

【讨论】:

【参考方案3】:

在创建网络后键入 model.count_params()。

【讨论】:

以上是关于Keras CNN模型参数计算的主要内容,如果未能解决你的问题,请参考以下文章

Cnn keras模型没有经过训练的参数表示和改进模型

如何找到keras模型的参数数量?

验证码是怎么被机器识别的?Keras+CNN模型验证码识别详解

使用 Keras 的 CNN 深度学习模型中的 PCA

Keras:如何将 CNN 模型与决策树连接起来

尝试使用 Keras 功能 API 构建 CNN 模型时图形断开连接