Keras CNN模型参数计算

jin*_*imo 12 keras

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

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()
Run Code Online (Sandbox Code Playgroud)

模型摘要给出如下表:

在此输入图像描述

我不清楚如何计算第二卷积层的参数数量(即,由红色矩形指示的51264).我认为数字将是(5*5 + 1)*64 = 1664,因为卷积内核的大小为5*5,并且要提取64个特征映射.

此外,我已经实施了辍学.为什么参数表不能反映这一点.虽然表中列出了丢失(层),但似乎没有给出丢失的参数号.任何人都可以帮我解释参数摘要?

bli*_*345 33

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

步骤1:计算参数的公式

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

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

filter_height = 5,
filter_weight = 5,
input_image_channels = 1
number_of_filters = 32
虽然你还没有给我们提供了开关输入图像通道,但我理解了它从你的参数值.

现在我们将计算第一个转换层的参数数量.

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

第3步:同样我们可以计算第2个转换层.请注意,前一层的滤镜数量成为当前图层输入图像的通道数.

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

现在我们将计算第二个转换层的参数个数.

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

  • @ blitu12345感谢您的回答,您知道为什么我们加1吗? (2认同)
  • @Rami的偏见 (2认同)