代码之家  ›  专栏  ›  技术社区  ›  FlyingBurger

如何计算卷积神经网络中的参数总数?[副本]

  •  1
  • FlyingBurger  · 技术社区  · 8 年前

    如何计算CNN网络中的参数总数

    代码如下:

    input_shape = (32, 32, 1)
    flat_input_size = input_shape[0]*input_shape[1]*input_shape[2]
    num_classes = 4
    
    cnn_model = Sequential()
    cnn_model.add(Conv2D(32, (3, 3), padding='same',
                     input_shape=input_shape))
    cnn_model.add(Activation('relu'))
    cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
    cnn_model.add(Conv2D(64, (3, 3)))
    cnn_model.add(Activation('relu'))
    cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
    cnn_model.add(Dropout(0.25))
    cnn_model.add(Conv2D(128, (3, 3), padding='same'))
    cnn_model.add(Activation('relu'))
    cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
    cnn_model.add(Dropout(0.25))
    cnn_model.add(Flatten())
    cnn_model.add(Dense(512))
    cnn_model.add(Activation('relu'))
    cnn_model.add(Dropout(0.5))
    cnn_model.add(Dense(num_classes))
    cnn_model.add(Activation('softmax'))
    

    结果如下 enter image description here

    如何获取320、18496、73856、590336、2052,有人能解释一下吗?

    1 回复  |  直到 8 年前
        1
  •  7
  •   marcopah    8 年前

    您可以使用以下通用公式:

    channels_in * kernel_width * kernel_height * channels_out + num_channels

    第一个例子是:

    1 * 3 * 3 * 32 + 32 = 320

    第二点:

    32 * 3 * 3 * 64 + 64 = 18,496

    通道数量的增加是偏差项。